通过PHP对mysqldump进行故障排除

通过PHP对mysqldump进行故障排除,php,mysql,Php,Mysql,我正在做一个项目,我正在玩弄转储和恢复数据库的维护能力,以便与早期的git开发一起工作。我的数据库将改变很多,所以我现在需要一个简单的方法来跟踪这一点。也许不是世界上最好的解决方案,但就目前而言,这是一个很好的处理方法 所以我的问题是我无法让mysqldump连接 我借用了另一篇文章的代码: 我不确定是什么阻止了这一点。也许您没有逃过传递给exec的命令,并且有一些特殊字符?请改为passthru而不是exec,看看您是否从passthrough获得了更多信息,它没有给我任何新的信息。我还检查了

我正在做一个项目,我正在玩弄转储和恢复数据库的维护能力,以便与早期的git开发一起工作。我的数据库将改变很多,所以我现在需要一个简单的方法来跟踪这一点。也许不是世界上最好的解决方案,但就目前而言,这是一个很好的处理方法

所以我的问题是我无法让mysqldump连接

我借用了另一篇文章的代码:


我不确定是什么阻止了这一点。

也许您没有逃过传递给exec的命令,并且有一些特殊字符?请改为passthru而不是exec,看看您是否从passthrough获得了更多信息,它没有给我任何新的信息。我还检查了该命令是否遇到了一些转义问题,到目前为止,我觉得这一切都很正常。你确定路径正确并且web服务器用户在那里有写权限吗?mysqldump中的退出代码定义可能会分散我的注意力,由于其退出状态与系统定义的退出代码不对应,其中1=不允许操作,等等。请参阅和mysqldump.c.cc的源代码?对于您正在使用的mysqldump版本,顺便说一下,它需要是mysqldump的最新可用版本,因为没有任何bug,新的实用程序与旧的服务器兼容,但例如,服务器5.5的mysqldump不适用于服务器5.6,而它的工作方式正好相反。
$command = "/usr/bin/mysqldump -u ".$database_user." -h ".$database_host." -p".$database_password." ".$database." > ".SERVER_PATH."data/testing.sql";

exec($command, $output, $return_var);

if($return_var !== 0) {
    $theTruth = "mysqldump for {$database_host} : {$database} failed with a return code of {$return_var}<br><br>\n\n";
    $theTruth .= "Error message was:<br>\n";
    $file = escapeshellarg("mysqldump_error.log");
    $message = `tail -n 1 $file`;
    $theTruth .= "- $message<br><br>\n\n";
    $theTruth .= "Exec: $command<br><br>\n\n";
    return $theTruth;
}
/usr/bin/mysqldump -u username -h localhost -ppass databasename > /path/to/save/every/thing/testing.sql