команды 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 ответов:
Сначала выполняется команда 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.ГЗ
Comments