Настройка автоматического резервного копирования баз данных MySQL на Ubuntu VPS. Скрипт получает список БД, исключает системные базы, создаёт дампы с опциональным сжатием и удаляет старые архивы согласно установленному сроку хранения.
Подготовка: создание пользователя MySQL
Создайте суперпользователя с правами чтения всех баз данных:
CREATE USER 'dbadmin'@'localhost' IDENTIFIED BY 'dbadminpasswd'; GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'localhost';
Создание скрипта резервного копирования
Создайте директорию и файл скрипта:
cd /scripts touch dbackup.sh
Параметры скрипта:
USER — суперпользователь с правами доступа. PASSWORD — пароль пользователя. DAYS_TO_KEEP — период хранения бекапов (0 = бесконечно). GZIP — сжатие файлов (1 = да, 0 = нет). BACKUP_PATH — директория для сохранения резервных копий.
#!/bin/bash
USER="dbadmin"
PASSWORD="dbadminpasswd"
DAYS_TO_KEEP=7
GZIP=1
BACKUP_PATH="/backups/mysql"
mkdir -p "$BACKUP_PATH"
databases=$(mysql -u "$USER" -p"$PASSWORD" -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")
for db in $databases; do
if [ "$GZIP" -eq 1 ]; then
mysqldump -u "$USER" -p"$PASSWORD" "$db" | gzip > "$BACKUP_PATH/$db-$(date +%Y%m%d).sql.gz"
else
mysqldump -u "$USER" -p"$PASSWORD" "$db" > "$BACKUP_PATH/$db-$(date +%Y%m%d).sql"
fi
done
if [ "$DAYS_TO_KEEP" -gt 0 ]; then
find "$BACKUP_PATH" -mtime +"$DAYS_TO_KEEP" -delete
fi
Автоматизация через Cron
Сделайте файл исполняемым и протестируйте вручную:
sudo chmod +x dbackup.sh sudo ./dbackup.sh
Добавьте задачу в crontab для ежедневного выполнения:
sudo crontab -e
@daily sh /scripts/dbackup.sh >> /var/log/mysql-backup.log 2>&1
После настройки вы получаете полностью автоматизированную систему резервного копирования баз данных MySQL с ротацией старых архивов.