mysqldump: получил errno 32 при записи (общий хост 1and1) как crontab - PullRequest
3 голосов
/ 21 марта 2011

Я использую точный код, который 1and1 предлагает для резервного копирования баз данных MySQL через mysqldump (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 для целей тестирования. Все еще не повезло. Продолжаю получать ошибку(errno 32 при записи).

Любая помощь приветствуется - это похоже на глупое исправление.

1 Ответ

4 голосов
/ 21 марта 2011

Если вы делаете это из задания cron, то DOCUMENT_ROOT не будет существовать. DOCUMENT_ROOT и другие переменные $_SERVER эффективно устанавливаются веб-сервером (см. справочная страница $ _SERVER ), и, если вы запускаете скрипт непосредственно из cron, веб-сервер не задействуется , См. это ранее, аналогичный вопрос .

Попробуйте установить путь к каталогу резервной копии относительно местоположения скрипта PHP. Например, если ваш сценарий находится в .../your_folder/scripts/backup_script.php, а ваш (предварительно созданный) каталог резервного копирования - .../your_folder/backup/, тогда

$backup_dir = dirname(__FILE__) . '/../backup';

... и затем используйте $backup_dir вместо getenv('DOCUMENT_ROOT').

Похоже, что инструкции ваших хостов верны, но только если запускать скрипт с веб-сервера, а не из командной строки.

...