2

我想在使用 php 脚本处理其表之前备份完整的数据库,所以我考虑使用 mysqldump。

我尝试使用 shell_exec() 运行 mysqldump 命令并检查它是否成功,如下所示:

$command = 'mysqldump -u username -ppassword database > /path/database.sql';
$result = shell_exec($command);

if(!is_null($result)) {
  echo 'Error during backup';
else {
  echo 'Database saved';
  // rest of the php script to modify the database (create/drop tables etc)
}

但是我注意到 $result 始终为空,即使我给出了无法写入文件的路径(没有现有目录,或者应该在 shell 提示符下返回权限被拒绝的东西)。

我错过了什么?

4

3 回答 3

4

这对我有用:

$command = 'mysqldump -u username -ppassword database > /path/database.sql';
system($command, $output);

if($output != 0) {
  echo 'Error during backup';
else {
  echo 'Database saved';
  // rest of the php script to modify the database (create/drop tables etc)
}
于 2013-02-20T13:59:51.603 回答
1

手册

返回值
执行命令的输出,如果发生错误,返回 NULL

但是,您将脚本的输出重定向到文件:

mysqldump -u username -ppassword database > /path/database.sql
                                          ^^^^^^^^^^^^^^^^^^^^

mysqldump 有可能(我真的不知道)生成标准返回码(其中的0意思OK和其他任何意思error)。如果是这种情况,您应该使用该机制,尽管您需要一个不同的 PHP 函数

string exec ( string $command [, array &$output [, int &$return_var ]] )
                                                   ^^^^^^^^^^^^^^^^
于 2013-02-14T10:51:50.553 回答
1

您应该删除 -u 和 -p 之间的所有空格,并且变量也使用“exec()”

$command = "mysqldump -u$username -p$password database > /home/yourusername/public_html/database.sql";
exec($command,$result, $output);

if($output != 0) {
  echo 'Error during backup';
}else {
  echo 'Database saved';
  // rest of the php script to modify the database (create/drop tables etc)
}
于 2014-06-30T11:00:18.300 回答