mysqldump:在写入时将errno 32(1and1共享主机)作为crontab

时间:2011-03-21 15:20:51

标签: php mysql hosting mysqldump

我正在使用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)。

感谢任何帮助 - 这似乎是一个愚蠢的修复。

1 个答案:

答案 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服务器运行脚本,而不是从命令行运行。