Главная/Статьи/Bash: Автоматический Backup для баз данных MySQL на сервере Ubuntu
Bash

Bash: Автоматический Backup для баз данных MySQL на сервере Ubuntu

Настройка автоматического резервного копирования баз данных 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 с ротацией старых архивов.