mysqldump通过PHP系统生成一个空白文件()

时间:2011-05-08 21:12:40

标签: php system mysqldump

在您说出这样的其他问题之前,但我见过的答案都没有,所以我提出了一个新问题。

我正在尝试使用mysqldump system()使用此命令:

$backup_path = $_SERVER['DOCUMENT_ROOT'] . '/website/acp/backup/';
$backup_name = $backup_path . $dbname . '.backup.' . date('l.dS.F.Y.g.iA') . '.sql';

$command = 'mysqldump ' . $dbname . ' -u ' . $dbuser . ' -p' . $dbpasswd . ' > ' . $backup_name;

system($command, $returned);

print_r($returned); 

$returned输出127并且大小为零KB的空白文件位于备份文件夹中,现在当我回显$command然后将其输入终端时,它完美地运行并生成数据库的完整备份。这是我不理解的部分,为什么它在system()电话中效果不佳,但在终端中工作得很好?

3 个答案:

答案 0 :(得分:1)

这是因为在运行mysqldump时,您需要输入密码,即使您使用-p

指定密码也是如此

这应该有用:http://www.techiecorner.com/1619/how-to-setup-mysqldump-without-password-in-cronjob/

答案 1 :(得分:0)

您的问题很可能是您没有写入备份目录的权限。

如果您运行代码:

$backup_path = $_SERVER['DOCUMENT_ROOT'] . '/website/acp/backup/';
file_put_contents("{$backup_path}test-file.txt", "test data");

文件是否出现在备份目录中?

如果不是,则需要修改目录的权限,以便Web服务器用户可以写入该目录。 chmod 777是一个简单的解决方案,但会保留权限。

答案 2 :(得分:0)

我不同意上面安德烈的回答。

以下适用于多家共享托管公司:

$command = 'mysqldump --opt --host='.$host.' --user='.$mysql_username.' --password=\''.$mysql_password.'\' '.$dbname.' > \''.$filename.'\'';
exec($command);

如果您在参数(文件名,密码等)中的任何位置使用引号,请小心。在PHP中,您可能需要在引用时使用反斜杠,就像我上面所做的那样。前置或尾随空格通常是一个坏主意,但我遇到了一个客户端,原来这是一个空的0字节mysqldump文件的原因。引用修复了问题。您可能还需要shell转义参数。

以下两行非常不同:

-password='password  ' db_name > 'my file.sql'
-password=password   db_name > my file.sql

请注意,第二个在密码末尾也有两个空格,但即便是HTML也可能会忽略它。

我应该提一下新手...确保你可以手动连接设置,然后再找出它不起作用的原因,例如: - 确保主机正确,例如localhost或yourdb.website.com - 确保用户名和密码正常工作