Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysqldump未通过PHP执行_Php_Mysql_Linux_Exec_Mysqldump - Fatal编程技术网

mysqldump未通过PHP执行

mysqldump未通过PHP执行,php,mysql,linux,exec,mysqldump,Php,Mysql,Linux,Exec,Mysqldump,我正在使用php exec函数尝试备份数据库,但它似乎不起作用。我尝试过不同的变化: $dbuser = "root"; $dbpwd = "somepass"; $dbhost = "localhost"; $db = "somedb"; $dir = "/var/www/backup/"; $filename = $db.".sql"; exec('/usr/bin/mysqldump -u '.$dbuser.' -p'.$dbpwd.' -h '.$dbhost.' '.$db.' &

我正在使用php exec函数尝试备份数据库,但它似乎不起作用。我尝试过不同的变化:

$dbuser = "root";
$dbpwd = "somepass";
$dbhost = "localhost";
$db = "somedb";
$dir = "/var/www/backup/";
$filename = $db.".sql";

exec('/usr/bin/mysqldump -u '.$dbuser.' -p'.$dbpwd.' -h '.$dbhost.' '.$db.' > '.$dir.$filename);
这可以通过以root用户身份登录的SSH运行。p似乎不能与空格一起工作,所以当我去掉它时,它是通过SSH工作的。当我在PHP中从exec运行whoami时,我得到了apache。这就是问题所在吗?如果是,我将如何解决

这是一个linux盒子。我在PHP脚本中没有发现任何错误(请确保在顶部设置display_errors),exec命令没有任何响应

任何帮助都将不胜感激


谢谢。

一个难看的解决方案:创建一个mysql用户,该用户只能读取内容(不需要更新、删除等功能),不需要密码,并且只能从本地主机连接。因此,您不需要-p参数。

如果它以root用户身份登录,而不是以其他用户身份登录,并且您确信命令中没有任何不同(完全相同的用户、pass等),那么最可能的问题是权限。在本例中,它是存储文件的目录

从php打印出整个命令,并以apache或php用户的身份运行它——而不是以root用户的身份运行,除非您将其配置为这样。这些文件是root组的所有者和一部分。我使用的db用户和密码是root登录详细信息。我不知道如何以apache身份登录,因为我还没有为此进行任何设置。我使用
sudo-u apache/usr/bin/mysqldump…
其中apache是您希望在测试时运行它的用户,因为它将从命令输出原始输出。这可能会给您带来一个有用的错误。当通过
exec(git pull-u origin master)执行git pull时,您会遇到相同的问题。
这与权限有关@MikeB说得对。