Автоматизированное создание backup MySQL с уведомлением в Телеграм

Dobriyk0t

Client
Регистрация
28.12.2016
Сообщения
89
Благодарностей
45
Баллы
18
Что нужно сделать после того как перенес все базы данных по всем проектам на свой локальный сервер? Правильно! Нужно настроить автоматизированные бэкапы, причем желательно с уведомлениями чтобы знать что они действительно делаются и не произошла какая-либо ошибка и при непредвиденной ситуации ты остался без бэкапов.
Для этого создадим пользователя в базе данных, пропишем ему права и напишем скрипт на bash для бэкапов и уведомлений. Уведомления будем слать в Телеграм. Все делаем через командую строку.


1. Создадим пользователя mysql с нужными правами
- Входим в базу данных командой:
Bash:
sudo mysql
или
Bash:
sudo mysql -u root -p
, должно появиться MariaDB [(none)]>.

- Создаем нового пользователя для бэкапов:
SQL:
CREATE USER 'backuper'@'localhost' IDENTIFIED BY 'пароль для backuper';
, где "backuper"- это имя пользователя, а "пароль для backuper" придуманный пароль.

- Даем пользователю права на чтение всех баз данных и блокировку таблиц:
SQL:
GRANT SELECT, LOCK TABLES, SHOW DATABASES, RELOAD, EVENT ON *.* TO 'backuper'@'localhost';
- Применяем:
SQL:
FLUSH PRIVILEGES;
Пользователя для бэкапов мы создали, теперь приступаем к написанию скрипта.

2. Создаем скрипт для бэкапов
- Создаем папку для хранения бэкапов:
Bash:
sudo mkdir -p /mnt/ssd/backup/mariadb
, где /mnt/ssd/backup/mariadb - это задаваемый путь, в моем случае это папка на подключенном SSD.

- Создаем новый файл для скрипта:
Bash:
sudo nano /usr/local/bin/backup_mariadb.sh
, где /usr/local/bin/ - это задаваемый путь(после файл скрипта можно перенести в любое место), а backup_mariadb.sh - это название файла скрипта.

и пишем код:
Bash:
#!/bin/bash
# Дата и время для имени файла бэкапа
TIMESTAMP=$(date +"%F_%T")

# Директория для хранения бэкапов, это папка которую мы раньше создали
BACKUP_DIR="/mnt/ssd/backup/mariadb"

# Имя файла бэкапа
BACKUP_FILE="$BACKUP_DIR/mariadb_backup_$TIMESTAMP.sql"

# Данные для подключения к MariaDB
DB_USER="backuper"
DB_PASSWORD="пароль для пользователя backuper"

# Данные для Telegram
TELEGRAM_TOKEN="Ваш бот API ключ"
TELEGRAM_CHAT_ID="Ваш чат ID"

# Функция отправки сообщения в Telegram
send_telegram_message() {
    local message=$1
    curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" \
    -d chat_id="$TELEGRAM_CHAT_ID" \
    -d text="$message"
}

# Создание бэкапа всех баз данных
if mysqldump --user=$DB_USER --password=$DB_PASSWORD --all-databases > "$BACKUP_FILE"; then
    send_telegram_message "Бэкап MariaDB выполнен успешно: $BACKUP_FILE"
else
    send_telegram_message "Ошибка при создании бэкапа MariaDB"
fi

# Удаление старых бэкапов (старше 7 дней)
find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -exec rm {} \;

echo "Бэкап завершен"
Сохраните и закройте файл.

- Теперь нужно сделать скрипт исполняемым:
Bash:
sudo chmod +x /usr/local/bin/backup_mariadb.sh
- А теперь давайте настроим автоматический запуск скрипта. Откроем планировщик cron:
Bash:
sudo crontab -e
Добавим строку в конец файла:
Bash:
0 5 * * * /usr/local/bin/backup_mariadb.sh >> /var/log/mariadb_backup.log 2>&1
Планировщик будет ежедневно запускать наш скрипт в 5 утра(можно изменить на любое время, 0 5).
backup.png

Я храню бэкапы локально на отдельном диске, мне так проще. Но как вы понимаете, все зависит только от вашей фантазии, бэкапы можно отправлять на сетевое хранилище, удаленный сервер по ssh(тут описано как это сделать) или облачное хранилище Google Drive, Dropbox, S3, Yandex Disk, Mail и т.д.
 
Последнее редактирование:
  • Спасибо
Реакции: LaGir, BAV и lx2003

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)