2013-04-06 2 views
5

Я пытаюсь создать задание cron для резервного копирования базы данных.Создание задания cron для mysqldump

Это то, что я до сих пор:

mysqldump.sh

mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log 

echo "Finished mysqldump $(date)" >> dump.log 

Cron работа:

32 18 * * * /db-backup/mysqldump.sh 

Проблема, которую я имею, является работа не выполняется через хрон или когда меня нет в каталоге.

Может кто-нибудь проконсультироваться. Неправильно ли мои пути?

Кроме того, в следующей строке, я не уверен, что будет выводить ошибки в dump.log:

mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log 

Что сработало:

mysqldump -u root -ptest --all-databases | gzip > "../db-backup/backup/backup-$(date).sql.gz" 2> ../db-backup/dump.log 

echo "Finished mysqldump $(date)" >> ../db-backup/dump.log 
+0

Ваш пример должен работать. Как вы убедитесь, что это * не выполняется *? – hek2mgl

+0

Ну, если я в каталоге и напечатаю ./mysqldump.sh, он работает; однако, если я cd .. и тип say ./db-backup/mysqldump.sh, то журнал и ответ не принимаются. Кроме того, указанное задание cron было установлено в 18:32 для тестирования. 18:32 прошло не резервное копирование. – Brian

+5

Вы должны использовать абсолютный путь к файлу журнала. Как '/ var/log/mysql.dump.log'. Убедитесь, что файл доступен для записи пользователем cron. Примечание. Задания, перечисленные в файле/etc/crontab или /etc/cron.d*, будут выполняться как root. Кроме того, для каждого пользователя используется механизм crontab. Такие cronjobs будут работать с теми же привилегиями, что и пользователь, которому принадлежит crontab. – hek2mgl

ответ

6

Есть несколько вещей, которые вы можете проверить, хотя больше информации всегда более полезно (разрешения и расположение файла, полное содержимое файла и т. д.).

  1. Не может нанести ущерб файлу mysqldump.sh с помощью Shebang syntax для вашей среды. Я бы рискнул догадаться, что #!/bin/bash будет достаточно.
  2. Вместо mysqldump -u .... используйте абсолютный путь /usr/bin/mysqldump (или где бы он ни находился в вашей системе). Абсолютные пути всегда являются хорошей идеей в любой форме сценариев, поскольку трудно сказать, имеет ли пользователь ту же среду, что и вы.

Что касается хранения ошибок в dump.log, я не верю, что ваш синтаксис верен. Я уверен, что вы делаете ошибки с gzip в dump.log, а не с mysqldump. Это похоже на fairly common question, который приходит по адресу mysqldump $PARAMS | gzip -c dump-$(date)

Смежные вопросы