Как автоматизировать резервное копирование базы данных MySQL с помощью Shell Script и Cron

Резервное копирование необходимо для обеспечения безопасности ваших данных, а автоматизация процесса резервного копирования может сэкономить вам время и силы. Если ваша база данных будет утеряна или повреждена, наличие последней резервной копии может спасти вам жизнь.
Регулярное резервное копирование имеет решающее значение для любого веб-сайта или приложения, использующего базу данных MySQL. Автоматизация этого процесса гарантирует регулярное резервное копирование без необходимости выполнять его вручную.
В этой статье мы покажем вам, как создать простой скрипт Bash для автоматизации резервного копирования баз данных MySQL. Затем мы настроим задание Cron для автоматического запуска этого скрипта резервного копирования по расписанию, чтобы обеспечить бесперебойное резервное копирование ваших баз данных.
Шаг 1: Создание сценария резервного копирования MySQL
Сначала давайте создадим простой скрипт Bash, который будет управлять процессом резервного копирования.
nano backup_mysql.sh
Скопируйте и вставьте следующий скрипт в файл backup_mysql.sh
:
# Учетные данные MySQL MYSQL_USER="ваше_имя_пользователя_MySQL" MYSQL_PASS="ваш_пароль_MySQL" MYSQL_HOST="localhost" # Каталог резервных копий (убедитесь, что этот каталог существует) BACKUP_DIR="/путь/к/вашему/каталогу/резервных/копий" # Получить текущую дату для добавления к имени резервной копии DATE=$(date +"%Y-%m-%d_%H-%M-%S") # Резервное копирование баз данных (перечислите имена баз данных, которые вы хотите скопировать) DATABASES=("db1" "db2" "db3") # Переберите каждую базу данных и создайте ее резервную копию for DB in "${DATABASES[@]}"; do BACKUP_FILE="$BACKUP_DIR/$DB_$DATE.sql" echo "Резервное копирование базы данных $DB в $BACKUP_FILE..." # Выполните резервное копирование с помощью mysqldump mysqldump -u $MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST $DB > $BACKUP_FILE # Проверьте, успешно ли выполнено резервное копирование if [ $? -eq 0 ]; then echo "Резервное копирование $ DB успешно завершено!" else echo "Сбой резервного копирования $ DB!" fi done # Очистка резервных копий старше 30 дней (необязательно) find $BACKUP_DIR -type f -name "*.sql" -mtime +30 -exec rm -f {} \;
- Учетные данные MySQL: вам нужно указать имя пользователя MySQL, пароль и хост (обычно localhost).
- Каталог резервных копий: здесь будут храниться ваши резервные копии. Убедитесь, что этот каталог существует в вашей системе.
- Резервное копирование с отметкой времени: скрипт создает резервные копии с отметкой времени (например, 2025-04-28_21-20-00.sql), чтобы избежать перезаписи старых резервных копий.
- Базы данных для резервного копирования: в массиве
DATABASES
укажите имена баз данных, которые вы хотите скопировать. При необходимости вы можете добавлять или удалять базы данных. - Команда резервного копирования: Сценарий использует mysqldump для создания резервных копий ваших баз данных.
- Очистка старых резервных копий: скрипт также удаляет резервные копии старше 30 дней (при необходимости вы можете изменить это время).
После того как вы сохраните свой скрипт, сделайте его исполняемым, выполнив команду chmod
:
chmod +x backup_mysql.sh
Шаг 2: Тестирование скрипта резервного копирования MySQL
Прежде чем настраивать задание Cron, рекомендуется протестировать скрипт вручную, чтобы убедиться, что всё работает должным образом.
./backup_mysql.sh
Проверьте каталог резервных копий, чтобы убедиться, что они успешно созданы. Если всё в порядке, переходите к следующему шагу.
Шаг 3: Автоматизация резервного копирования MySQL с помощью заданий Cron
Теперь, когда у нас есть сценарий резервного копирования, следующим шагом будет его автоматизация с помощью Cron — инструмента, который запускает команды по расписанию.
crontab -e
Добавьте задание Cron для автоматического запуска сценария резервного копирования. Например, чтобы запускать сценарий каждый день в 2 часа ночи, добавьте следующую строку:
0 2 * * * /bin/bash /путь/к/файлу/backup_mysql.sh
Вот как работает расписание Cron:
0
: Минута (0-я минута).2
: Час (2 часа ночи).*
: Каждый день месяца.*
: Каждый месяц.*
: Каждый день недели.
Чтобы убедиться, что ваше задание Cron выполняется, вы можете проверить системные журналы или временно настроить запуск скрипта на более раннее время, чтобы проверить, работает ли он.
grep CRON /var/log/syslog
Дополнительные соображения
- Безопасность: хранение пароля MySQL в скрипте удобно, но небезопасно. Для большей безопасности вы можете хранить свои учётные данные в файле
.my.cnf
в вашем домашнем каталоге и настроить скрипт на чтение оттуда. - Место хранения резервных копий: убедитесь, что в каталоге резервных копий достаточно места для ваших резервных копий. Если вы выполняете несколько резервных копий, рекомендуется создать отдельное место хранения (например, внешний жесткий диск или облачное хранилище).
- Частота резервного копирования: в зависимости от того, как часто меняются ваши данные, вы можете настроить расписание заданий Cron. Например, вы можете выполнять резервное копирование каждый час, каждую неделю или только в определенные дни.
Заключение
Автоматизировав резервное копирование MySQL с помощью простого сценария Bash и задания Cron, вы обеспечите регулярное безопасное резервное копирование баз данных без необходимости делать это вручную. С помощью всего нескольких строк кода вы можете настроить автоматическую систему резервного копирования, которая будет запускаться с заданной вами периодичностью.