команды mysqldump & gzip для правильного создания сжатого файла базы данных MySQL с помощью crontab


у меня возникли проблемы с получением crontab на работу. Я хочу автоматизировать резервное копирование базы данных MySQL.

настройки:

  • Debian GNU / Linux 7.3 (wheezy)
  • версия сервера MySQL: 5.5.33-0+wheezy1 (Debian)
  • каталоги user, backup и backup2 имеют разрешение 755
  • имена пользователей для MySQL db и учетной записи Debian одинаковы

из оболочки эта команда работает

mysqldump -u user -p[user_password] [database_name] | gzip > dumpfilename.sql.gz

когда я помещаю это в crontab с помощью crontab-e

* * /usr/bin/mysqldump -u user -pupasswd mydatabase | gzip> /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz >/dev/null 2>&1

файл создается каждую минуту в каталоге/home/user / backup, но имеет 0 байт.

однако, когда я перенаправляю этот вывод во второй каталог, backup2, я отмечаю, что в нем создается правильный mysqldumpfile, должным образом сжатый. Я не могу понять, в чем заключается ошибка, которую я делаю, что приводит к 0-байтному файлу в первом каталоге и ожидаемому выходу во втором справочник.

* * /usr/bin/mysqldump -u user -pupasswd my-database | gzip> /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz >/home/user/backup2/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz 2>&1

Я был бы очень признателен за объяснение.

спасибо

3   51   2014-03-09 07:58:02

3 ответа:

Сначала выполняется команда mysqldump, и генерируемый вывод перенаправляется с помощью канала. Канал отправляет стандартный вывод в команду gzip в качестве стандартного ввода. После имени файла.gz, является оператором перенаправления вывода ( > ), который будет продолжать перенаправление данных до последнего имени файла, в котором будут сохранены данные.

например, эта команда сбросит базу данных и запустит ее через gzip, и данные, наконец, приземлятся три.ГЗ

mysqldump -u user -pupasswd my-database | gzip > one.gz > two.gz > three.gz

$> ls -l
-rw-r--r--  1 uname  grp     0 Mar  9 00:37 one.gz
-rw-r--r--  1 uname  grp  1246 Mar  9 00:37 three.gz
-rw-r--r--  1 uname  grp     0 Mar  9 00:37 two.gz

мой оригинальный ответ является примером перенаправления дампа базы данных на многие сжатые файлы (без двойного сжатия). (Так как я просмотрел вопрос и серьезно пропустил - извините)

это пример повторного сжатия файлов:

mysqldump -u user -pupasswd my-database | gzip -c > one.gz; gzip -c one.gz > two.gz; gzip -c two.gz > three.gz

$> ls -l
-rw-r--r--  1 uname  grp  1246 Mar  9 00:44 one.gz
-rw-r--r--  1 uname  grp  1306 Mar  9 00:44 three.gz
-rw-r--r--  1 uname  grp  1276 Mar  9 00:44 two.gz

это хороший ресурс, объясняющий перенаправление ввода-вывода:http://www.codecoffee.com/tipsforlinux/articles2/042.html

можно использовать для перенаправления вывода:

/usr/bin/mysqldump -u user -pupasswd my-database | \
tee >(gzip -9 -c > /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz)  | \
gzip> /home/user/backup2/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz 2>&1

документации здесь

Если вам нужно добавить дату-время к имени файла резервной копии (Centos7), используйте следующее:

/usr/bin/mysqldump -u USER -pPASSWD DBNAME | gzip > ~/backups/db.$(date +%F.%H%M%S).sql.gz

это создаст файл: db.2017-11-17.231537.язык SQL.ГЗ