- Регистрация
- 28.12.2016
- Сообщения
- 89
- Благодарностей
- 45
- Баллы
- 18
Что нужно сделать после того как перенес все базы данных по всем проектам на свой локальный сервер? Правильно! Нужно настроить автоматизированные бэкапы, причем желательно с уведомлениями чтобы знать что они действительно делаются и не произошла какая-либо ошибка и при непредвиденной ситуации ты остался без бэкапов.
Для этого создадим пользователя в базе данных, пропишем ему права и напишем скрипт на bash для бэкапов и уведомлений. Уведомления будем слать в Телеграм. Все делаем через командую строку.
1. Создадим пользователя mysql с нужными правами
- Входим в базу данных командой:
или
, должно появиться MariaDB [(none)]>.
- Создаем нового пользователя для бэкапов:
, где "backuper"- это имя пользователя, а "пароль для backuper" придуманный пароль.
- Даем пользователю права на чтение всех баз данных и блокировку таблиц:
- Применяем:
Пользователя для бэкапов мы создали, теперь приступаем к написанию скрипта.
2. Создаем скрипт для бэкапов
- Создаем папку для хранения бэкапов:
, где /mnt/ssd/backup/mariadb - это задаваемый путь, в моем случае это папка на подключенном SSD.
- Создаем новый файл для скрипта:
, где /usr/local/bin/ - это задаваемый путь(после файл скрипта можно перенести в любое место), а backup_mariadb.sh - это название файла скрипта.
и пишем код:
Сохраните и закройте файл.
- Теперь нужно сделать скрипт исполняемым:
- А теперь давайте настроим автоматический запуск скрипта. Откроем планировщик cron:
Добавим строку в конец файла:
Планировщик будет ежедневно запускать наш скрипт в 5 утра(можно изменить на любое время, 0 5).
Я храню бэкапы локально на отдельном диске, мне так проще. Но как вы понимаете, все зависит только от вашей фантазии, бэкапы можно отправлять на сетевое хранилище, удаленный сервер по ssh(тут описано как это сделать) или облачное хранилище Google Drive, Dropbox, S3, Yandex Disk, Mail и т.д.
Для этого создадим пользователя в базе данных, пропишем ему права и напишем скрипт на bash для бэкапов и уведомлений. Уведомления будем слать в Телеграм. Все делаем через командую строку.
1. Создадим пользователя mysql с нужными правами
- Входим в базу данных командой:
Bash:
sudo mysql
Bash:
sudo mysql -u root -p
- Создаем нового пользователя для бэкапов:
SQL:
CREATE USER 'backuper'@'localhost' IDENTIFIED BY 'пароль для 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
- Создаем новый файл для скрипта:
Bash:
sudo nano /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
Bash:
sudo crontab -e
Bash:
0 5 * * * /usr/local/bin/backup_mariadb.sh >> /var/log/mariadb_backup.log 2>&1
Я храню бэкапы локально на отдельном диске, мне так проще. Но как вы понимаете, все зависит только от вашей фантазии, бэкапы можно отправлять на сетевое хранилище, удаленный сервер по ssh(тут описано как это сделать) или облачное хранилище Google Drive, Dropbox, S3, Yandex Disk, Mail и т.д.
Последнее редактирование: