在PHP中备份和恢复MySQL数据库

4
我将尝试使用PHP备份和恢复MySQL数据库:

备份:
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'dbpass';
$dbname = 'test';

$output = "D:/backup/test.sql";
exec("D:/xampp/mysql/bin/mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname > $output");
echo "Backup complete!";

恢复:

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'dbpass';
$dbname = 'test';

$output = "D:/restore/test.sql";
exec("D:/xampp/mysql/bin/mysql --opt -h $dbhost -u $dbuser -p $dbpass $dbname < $output");
echo "Restore complete!";

但是两个都没有起作用。备份完成后,我检查test.sql文件发现是空的。恢复完成后,数据库仍然是空的。如何解决这个问题?

你需要在路径中使用反斜杠(而不是正斜杠),因为你正在使用 Windows。 - rakeshjain
将“exec”替换为“echo”,在命令行中运行生成的命令,并阅读错误消息。 - Gerald Schneider
1个回答

12

使用Php备份的脚本

<?php
define("BACKUP_PATH", "/home/abdul/");

$server_name   = "localhost";
$username      = "root";
$password      = "root";
$database_name = "world_copy";
$date_string   = date("Ymd");

$cmd = "mysqldump --routines -h {$server_name} -u {$username} -p{$password} {$database_name} > " . BACKUP_PATH . "{$date_string}_{$database_name}.sql";

exec($cmd);
?>

恢复脚本

<?php

$restore_file  = "/home/abdul/20140306_world_copy.sql";
$server_name   = "localhost";
$username      = "root";
$password      = "root";
$database_name = "test_world_copy";

$cmd = "mysql -h {$server_name} -u {$username} -p{$password} {$database_name} < $restore_file";
exec($cmd);

?>

当我备份时,20140306_test.sql 文件为 0 字节,为空。 - DeLe
对我来说它有效,传递mysqldump的完整路径而不是mysqldump。完整路径意味着“D:/xampp/mysql/bin/mysqldump”。 - Abdul Manaf
我已经将数据库备份保存在我的下载表中,并且根据答案,我已经给出了SQL文件的完整目录路径,但它仍然显示“string(0) ""”。 - always-a-learner
如果是多个数据库,那么它是如何工作的?我们尝试使用循环来处理多个数据库,但每次都会还原数据库的第一个文件。 - Smit Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接