Backup Zabbix сервера с Mysql и Nginx

Введение

В данной заметке разберем как сделать backup Zabbix сервера в связке с установленным Mysql и Nginx

Будем бекапить все директории которые использует Zabbix с помощью Rsync, базу данных, настройки Nginx c SSL сертификатами, дальше все упакуем в архив, сложим в нужную директорию на хранение и отправим в Telegram сообщение о дате создания, имени и ip адресе нашего Zabbix сервера с указанием пути к бекапу.

В приведенном скрипте ниже вы можете закомментировать и оставить только то что вы считаете нужным для своего бекапа, например только директорию /etc/zabbix и базу данных Mysql, это лишь один из множества велосипедов как это можно сделать.

Про установку Zabbix сервера в связке с Nginx и Mysql можно почитать в моей заметке


Подготовка

Установим Rsync

apt install rsync

Создадим директорию для наших бекапов, в примере я буду хранить их в /home/user/backup

mkdir -p /home/ПОЛЬЗОВАТЕЛЬ/backup

Что бы не потерять инструкцию рекомендую подписаться на мой личный блог-канал в Telegram в котором я делюсь в формате заметок своими знаниями и интересным из мира IT

Создание Backup с помощью Rsync, mysqldump и tar

Создаем наш скрипт для бекапа в удобном для вас месте:

nano /home/ПОЛЬЗОВАТЕЛЬ/backup_zabbix.sh

Вставляем туда следующее содержимое и заменяем на свои значения и пути, так же в скрипте оставил комментарии для понимания что будет происходить:

#!/bin/bash

# Определение даты и времени
datetime=$(date +"%Y.%m.%d_%H:%M:%S")

# Остановка Zabbix сервера
systemctl stop zabbix-server

# Указываем директории которые будем бекапить, можно закомментировать, раскомментировать нужное
directories=(
"/etc/zabbix"
"/usr/share/zabbix"
"/var/log/zabbix"
"/etc/nginx"
"/usr/lib/zabbix"
#"/etc/letsencrypt"
)

# Указываем информацию для подключения к базе данных MySQL
database="НАЗВАНИЕ_БАЗЫ_ZABBIX"
db_user="ПОЛЬЗОВАТЕЛЬ_БАЗЫ_ZABBIX"
db_password="ПАРОЛЬ_ОТ_БАЗЫ_ZABBIX"

# Создаем временную директорию для сохранения бекапа
temp_dir="/tmp/zabbix_backup_$datetime"
mkdir -p "$temp_dir"

# Копируем директории во временную директорию с помощью rsync
for dir in "${directories[@]}"
do
rsync -R -avz "$dir" "$temp_dir"
done

# Создаем дамп базы данных MySQL во временную директорию 
mysqldump -u "$db_user" -p"$db_password" "$database" > "$temp_dir/$database-$datetime.sql"

# Архивируем нашу временную директорию в место хранения, мы создали его на первых шагах
backup_file="/home/ПОЛЬЗОВАТЕЛЬ/backup/zabbix_backup_$datetime.tar.gz"
tar -czvf "$backup_file" "$temp_dir"

# Удаляем временную директорию
rm -rf "$temp_dir"

# Удаляем резервные копии старше 7 дней, заменить на свой пусть хранения бекапов
find /home/ПОЛЬЗОВАТЕЛЬ/backup/ -name "*.tar.gz" -type f -mtime +7 -delete

# Запускаем Zabbix сервер
systemctl start zabbix-server

# Отправляем сообщение в Telegram
telegram_token="ТОКЕН_БОТА"
chat_id="ЧАТ_ID"
host=$(hostname)
local_ip=$(hostname -I | awk '{print $1}')

message="Бекап окончен в $datetime на $host $local_ip - $backup_file, не забудь проверить backup!"
curl -s -X POST "https://api.telegram.org/bot$telegram_token/sendMessage" -d chat_id="$chat_id" -d text="$message"

Делаем скрипт исполняемым:

chmod +x /home/user/backup_zabbix.sh

и запускаем его, дожидаемся окончания, проверяем что все было создано и можно переходить к добавлению задания в Cron

/home/user/backup_zabbix.sh
Backup Zabbix сервера с Mysql и Nginx

Добавляем задачу в Cron на каждый день в 01:00:

crontab -e

Меняем на свой пусть к скрипту и не забываем про отступ на новую строку перед сохранением задания:

0 1 * * * /home/user/backup_zabbix.sh


Вывод

В данной заметке разобрали еще один велосипед для бекапа Zabbix сервера, данный скрипт можно дописать на монтирование сетевой шары и отмонтирование ее после бекапа, отправка в Telegram информации по весу бекапа и прочему, в общем на что хватит фантазии и ваших потребностей

Что бы не потерять инструкцию рекомендую подписаться на мой личный блог-канал в Telegram в котором я делюсь в формате заметок своими знаниями и интересным из мира IT, спасибо за потраченное время на чтение и доброго времени суток!)

Так же вы можете отблагодарить автора материально:

Оставьте комментарий