我正在尝试使用带有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()函数。
答案 0 :(得分:1)
从上面的评论中解决问题的方法是,PHP请求在XAMPP中作为具有有限权限的用户执行,并且mysqldump进程继承了这些权限。
检查exec()
运行的进程的退出状态,确认mysqldump以非零退出状态退出,表示由于某种原因导致失败。
在mysqldump进程尝试写入的目录上打开777的写权限解决了错误。
找出具体的uid& amp; Apache进程的gid(检查Apache配置文件中的User
和Group
配置值(例如 xampp-home /apache/conf/httpd.conf)并输出该目录可由该uid或gid写入。