无法从 PHP 脚本执行 mysqldump

Unable to execute mysqldump from PHP script

我正在尝试使用 mysqldumpexec() 功能为我的数据库创建定期备份(可怜的人的 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() 函数。

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

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

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

还应该足以找出 Apache 进程的特定 uid 和 gid(检查 Apache 配置文件中的 UserGroup 配置值(例如 xampp-home/apache/conf/httpd.conf) 并使输出目录可由该 uid 或 gid 写入。