我有一个备份整个数据库的脚本。如果需要备份特定数据库的特定表怎么办?例如,在数据库“演示” 中,我有两个(2)表“用户” 和“销售” 。我有一个下拉菜单,其中有数据库内部表的列表,以便可以选择要备份的表。但是我不知道如何备份特定的表。我该怎么办?
用于备份整个数据库的PHP脚本:
// 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 = $dbname . '_backup_' . date("F Y") . '.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);
}
答案 0 :(得分:1)
您可以尝试mysqldump
Usage: mysqldump [OPTIONS] database [tables]
即
mysqldump -u username -p db_name table1_name table2_name table3_name > dump.sql
您可以使用exec()函数执行外部命令。
注意:在shell_exec()和exec()之间,我会选择第二个,它不会将输出返回到PHP脚本-不需要PHP脚本以字符串的形式获取整个SQL转储:您只需要将其写入文件即可,这可以通过命令本身完成。
该外部命令将:
使用正确的参数调用mysqldump, 并将输出重定向到文件。 例如:
mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql
这意味着您的PHP代码将如下所示:
exec('mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql');
当然,您可以使用正确的连接信息,将...替换为这些信息。
答案 1 :(得分:1)
将其写入文件自定义文件是否有特定原因?是用于备份还是用于显示。
如果已备份,请查看Mysqldump。
mysqldump -u username -p demo user sales > mydump.sql
使用\进行多行显示。
https://idiallo.com/blog/mysql-dump-table-where包含一个很好的解释。
您需要在exec函数中运行它(所以exec('mysqldump ....');)