无法从PHP脚本执行mysqldump

时间:2016-09-19 23:10:52

标签: php mysql apache exec

我正在尝试使用带有mysqldump功能的exec()创建数据库的定期备份(穷人的cron)。我在macOS上使用XAMPP / PHP7。

$command = "$mysqldump_location -u$db_user -h$db_host -p$db_password $db_name > $backup_file_location";
exec($command);

当我运行PHP脚本时,我在$backup_file_location中提到的路径中没有得到SQL转储但如果我直接在终端上执行相同的$command字符串,我会得到所需的SQL文件位置。

我无法理解这里可能出现的问题。还可以获得有关转储整个数据库的更好方法的建议。

修改1:

$mysqldump_location的值为/Applications/XAMPP/xamppfiles/bin/mysqldump

$backup_file_location的值为/Applications/XAMPP/xamppfiles/htdocs/app5/data/sqldumps/sql_data.sql

/app5/是我开发应用时的文件夹。

编辑2: 可能的重复建议不适用,因为此处的问题不在于如何转储SQL备份。这里的关键问题是使用mysqldump的备份是通过终端进行的,而不是通过PHP的exec()函数。

1 个答案:

答案 0 :(得分:1)

从上面的评论中解决问题的方法是,PHP请求在XAMPP中作为具有有限权限的用户执行,并且mysqldump进程继承了这些权限。

检查exec()运行的进程的退出状态,确认mysqldump以非零退出状态退出,表示由于某种原因导致失败。

在mysqldump进程尝试写入的目录上打开777的写权限解决了错误。

找出具体的uid& amp; Apache进程的gid(检查Apache配置文件中的UserGroup配置值(例如 xampp-home /apache/conf/httpd.conf)并输出该目录可由该uid或gid写入。