我正在使用1和1建议通过mysqldump备份MySQL数据库的确切代码(http://faq.1and1.co.uk/archive/43.html)
$host= 'xxxx';
$user= 'xxxx';
$pass= 'xxxx';
$db= 'xxxx';
system(sprintf(
'mysqldump --opt -h%s -u%s -p%s %s | gzip > %s/backup/' . time() . '.sql.gz',
$host,
$user,
$pass,
$db,
getenv('DOCUMENT_ROOT')
));
为了测试目的,已将所有权限更改为777。仍然没有运气。继续得到错误(写入错误32)。
感谢任何帮助 - 这似乎是一个愚蠢的修复。
答案 0 :(得分:4)
如果您是从cron作业执行此操作,则DOCUMENT_ROOT
将不存在。 DOCUMENT_ROOT
和其他$_SERVER
变量由Web服务器有效设置(请参阅the $_SERVER manual page),如果您直接从cron运行脚本,则不涉及Web服务器。请参阅this earlier, similar question。
尝试相对于PHP脚本的位置设置备份目录的路径。例如,如果您的脚本位于.../your_folder/scripts/backup_script.php
,而您的(预先创建的)备份目录位于.../your_folder/backup/
,那么
$backup_dir = dirname(__FILE__) . '/../backup';
...然后使用$backup_dir
代替getenv('DOCUMENT_ROOT')
。
看起来主机的说明是正确的,但仅限于从Web服务器运行脚本,而不是从命令行运行。