Работая с cronjobs, bashscripts для автоматизации резервных копий MySQL

  • Я в настоящее время настраиваю систему, которая использует базу данных MySQL.
  • Я хочу создать автоматизированные резервные копии, которые работают каждый вечер в 22:00 и также сохраняют резервные копии в течение 30 дней.

Я знаю, что существует способ использовать cronjob и bashscript, который выполняется. Я уже настроил a .my.cnf для моего пользователя SQL, таким образом, я не должен буду вставлять пароль в bashscript.

Все учебные руководства, которые я нахожу, действительно имеют некоторые отдельно оплачиваемые предметы, в которых я не нуждаюсь, и в настоящее время я не чувствую к уверенному для создания сценария сам.

У Вас есть идея или учебное руководство, которое просто и легко?

2
задан 17 July 2016 в 19:52

1 ответ

На самом деле нет необходимости в bash-скрипте. Сначала выясните, какая команда резервного копирования подойдет вам. В принципе, вы можете сделать что-то так же просто, как:

mysqldump > /path/to/mysqldump.sql 2>/path/to/mysqldump.err

Это запишет содержимое всех баз данных в файл с именем mysqldump.sql. Форма этого такова, что если вам нужно восстановить базу данных после аварии, все, что вам нужно сделать, это mysql < /path/to/mysqldump.sql. Более того, mysqldump сохраняет целостность базы данных, то есть он создаст непротиворечивую копию базы данных, даже если транзакция происходила во время дампа. Если есть ошибка, она будет записана в mysqldump.err.

Вам может потребоваться исследовать такие параметры, как -u, --login-path=local и --events. Также вы можете указать определенное --databases для резервного копирования. Ради этого обсуждения я не буду вдаваться во все это.

Если команда mysqldump работает для вас, вы захотите, чтобы она запускалась автоматически как задание cron. Чтобы запускать дамп ежедневно в 22:00, укажите это на вкладке cron:

0 22 * * * mysqldump ... (etc)

Конечно, это будет ежедневно перезаписывать базу данных сброса. Чтобы сохранить 30 копий, вам нужно использовать logrotate. В /etc/logrotate.d создайте новый файл с именем (скажем) mysqldump. В этом файле введите:

/path/to/mysqldump.sql {
  su (your username)
  rotate 30
  daily
  missingok
  notifempty
}

Сохраните файл и перезапустите logrotate.

Logrotate ежедневно посещает ваш каталог mysqldump и переименовывает самый новый в mysqldump.sql.1, самый новый-но-один в mysqldump.sql.2 и так далее. Если у вас уже есть 30 копий, он удалит самую старую.

Что касается учебников, то вам они не нужны. Просто прочитайте man mysqldump, man crontab и man logrotate. Это все очень хорошо понятные инструменты, которые будут просто работать.

1
ответ дан 2 December 2019 в 04:55

Другие вопросы по тегам:

Похожие вопросы: