Введение
В данной заметке разберем как сделать 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
Добавляем задачу в Cron на каждый день в 01:00:
crontab -e
Меняем на свой пусть к скрипту и не забываем про отступ на новую строку перед сохранением задания:
0 1 * * * /home/user/backup_zabbix.sh
Вывод
В данной заметке разобрали еще один велосипед для бекапа Zabbix сервера, данный скрипт можно дописать на монтирование сетевой шары и отмонтирование ее после бекапа, отправка в Telegram информации по весу бекапа и прочему, в общем на что хватит фантазии и ваших потребностей
Что бы не потерять инструкцию рекомендую подписаться на мой личный блог-канал в Telegram в котором я делюсь в формате заметок своими знаниями и интересным из мира IT, спасибо за потраченное время на чтение и доброго времени суток!)
Так же вы можете отблагодарить автора материально: