用php将整个mysql数据库备份到指定的文件/位置

1mrurvl1  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(444)

伙计们,请告诉我要添加什么到下面的代码,以获得备份的数据库,我可以保存在特定的位置的文件。现在脚本要求我保存文件为ussual当我下载的东西由webbrowser。我想运行脚本并将文件x.sql自动保存在系统中的特定位置—例如在不带任何交互选项的c:/backups中。
代码:

<?php

// Database configuration
$host = "localhost";
$username = "test";
$password = "test";
$database_name = "test";

// Get connection object and set the charset
$conn = mysqli_connect($host, $username, $password, $database_name);
$conn->set_charset("utf8");

// Get All Table Names From the Database
$tables = array();
$sql = "SHOW TABLES";
$result = mysqli_query($conn, $sql);

while ($row = mysqli_fetch_row($result)) {
    $tables[] = $row[0];
}

$sqlScript = "";
foreach ($tables as $table) {

    // Prepare SQLscript for creating table structure
    $query = "SHOW CREATE TABLE $table";
    $result = mysqli_query($conn, $query);
    $row = mysqli_fetch_row($result);

    $sqlScript .= "\n\n" . $row[1] . ";\n\n";

    $query = "SELECT * FROM $table";
    $result = mysqli_query($conn, $query);

    $columnCount = mysqli_num_fields($result);

    // Prepare SQLscript for dumping data for each table
    for ($i = 0; $i < $columnCount; $i ++) {
        while ($row = mysqli_fetch_row($result)) {
            $sqlScript .= "INSERT INTO $table VALUES(";
            for ($j = 0; $j < $columnCount; $j ++) {
                $row[$j] = $row[$j];

                if (isset($row[$j])) {
                    $sqlScript .= '"' . $row[$j] . '"';
                } else {
                    $sqlScript .= '""';
                }
                if ($j < ($columnCount - 1)) {
                    $sqlScript .= ',';
                }
            }
            $sqlScript .= ");\n";
        }
    }

    $sqlScript .= "\n"; 
}

if(!empty($sqlScript))
{
    // Save the SQL script to a backup file
    $backup_file_name = $database_name . '_backup_' . time() . '.sql';
    $fileHandler = fopen($backup_file_name, 'w+');
    $number_of_lines = fwrite($fileHandler, $sqlScript);
    fclose($fileHandler); 

    // Download the SQL backup file to the browser
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($backup_file_name));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($backup_file_name));
    ob_clean();
    flush();
    readfile($backup_file_name);
    exec('rm ' . $backup_file_name); 
}
?>
juud5qan

juud5qan1#

您已经将文件保存到磁盘的某个位置,所以只需将位置更改为您想要的位置

if(!empty($sqlScript))
{
    $path = 'C:/my_db_backups/';

    // Save the SQL script to a backup file
    $backup_file_name = $path . $database_name . '_backup_' . time() . '.sql';

    . . .

然后拆下

exec('rm ' . $backup_file_name);

相关问题