无法从 PHP 脚本执行 mysqldump
Unable to execute mysqldump from PHP script
我正在尝试使用 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() 函数。
根据上面的评论,问题的解决方案是 PHP 请求作为具有有限权限的用户在 XAMPP 中执行,而 mysqldump 进程继承了这些权限。
通过 exec()
检查进程 运行 的退出状态确认 mysqldump 以非零退出状态退出,表明它由于某种原因失败。
在 mysqldump 进程尝试写入的目录上打开对 777 的写入权限解决了错误。
还应该足以找出 Apache 进程的特定 uid 和 gid(检查 Apache 配置文件中的 User
和 Group
配置值(例如 xampp-home/apache/conf/httpd.conf) 并使输出目录可由该 uid 或 gid 写入。
我正在尝试使用 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() 函数。
根据上面的评论,问题的解决方案是 PHP 请求作为具有有限权限的用户在 XAMPP 中执行,而 mysqldump 进程继承了这些权限。
通过 exec()
检查进程 运行 的退出状态确认 mysqldump 以非零退出状态退出,表明它由于某种原因失败。
在 mysqldump 进程尝试写入的目录上打开对 777 的写入权限解决了错误。
还应该足以找出 Apache 进程的特定 uid 和 gid(检查 Apache 配置文件中的 User
和 Group
配置值(例如 xampp-home/apache/conf/httpd.conf) 并使输出目录可由该 uid 或 gid 写入。