У меня есть сервер Bacula, который мы назовем, например bacula-server, на котором находится основой director и storage daemon и куча клиентских машин. На нескольких из них крутятся MySQL сервера.
Задача: настроить резервирование дампов базы MySQL.
Правда, если честно, я не уверен, что решил ее самым правильным и элегантным способом, поскольку с bacula имел дело впервые.
Делать будем следующим образом: задание bacula будет запускать скрипт, который формирует дампы БД MySQL, резервировать их, а после этого удалять.
Настройка на клиентской машине:
Устанавливаем клиентское приложение bacula-client
apt-get updateИзменяем конфигурационный файл /etc/bacula/bacula-fd.conf
apt-get install bacula-client
Director {После этого перезапускаем bacula /etc/init.d/bacula-fd restart
Name = <Название директора> #указываем имя директора, который будет присылать задания этому клиенту
Password = "<длинный пароль>" #этот пароль потом нужно будет внести на сервер
}
FileDaemon {
Name = <Название клиента>
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
FDAddress =
}
Если нужно, добавить разрешение в firewall, чтобы открыть 9102 порт
ufw allow proto tcp from <ip адрес директора> to any port 9102
Добавляем в MySQL пользователя, который сможет делать резервные копии БД:
GRANT SELECT, LOCK TABLES on *.* TO dumper@localhost IDENTIFIED BY '<пароль>';
Создаем скрипты, которые будет использовать bacula
mkdir /var/backups/mysql/
chmod +x /usr/bin/mysql.backup.sh
nano /usr/bin/mysql.backup.sh
Это скрипт, который будет создавать дампы
#!/bin/sh
#dump databases
/usr/bin/mysqldump --user=dumper --password=<пароль> <название бд> | gzip > /var/backups/mysql/название бд-`date "+%Y-%m-%d"`.sql.gz
nano /usr/bin/mysql.backup.clear.sh
chmod +x /usr/bin/mysql.backup.clear.shА этот скрипт будет очищать папку с дампами, которые уже скопированы
#!/bin/sh#Clear dir /var/backup/mysql/bin/rm /var/backup/mysql/*Серверная сторона
Для начала нам необходим добавить в конфиг /etc/bacula/bacula-dir.conf секции JobDefs, FileSet, Shedule, Storage, Pool. Мы сделаем это один раз и сформируем шаблон, который позволит быстро и удобно добавлять клиентские машины:
Хранилище
Storage { Name = MySQLStorage-dir Address = <ip адрес storage daemon> # он обязательно должен быть доступен с клиента SDPort = 9103 Password = "<пароль storage daemon>"Список файлов
Device = MySQLStorage Media Type = File}
FileSet { Name = "MySQLDumpFileSet" Include { Options { signature = MD5 } File = /var/backups/mysql/ }}
Расписание
Schedule {
Name = "MySQLDaily"
Run = Full mon-sun at 01:30
}
Пул
Pool { Name = MySQLPool Pool Type = Backup Recycle = yes AutoPrune = yes Label Format = MySQLAutoVol- Volume Retention = 1 months Maximum Volume Jobs = 1 Maximum Volume Bytes = 2G Maximum Volumes = 100}
JobDefs {
Name = "BackupMySQLDump"
Type = Backup
Level = Full
FileSet = "MySQLDumpFileSet"
Schedule = "MySQLDaily"
Storage = MySQLStorage-dir
Messages = Standard
Pool = MySQLPool
Priority = 10
ClientRunBeforeJob = /usr/bin/mysql.backup.sh
ClientRunAfterJob = /usr/bin/mysql.backup.clear.sh
Write Bootstrap = "/var/lib/bacula/%c.bsr"
}
Далее добавление каждого клиентского сервера будет довольно простым: нужно будет добавить секции Job и Client
ЗаданиеJob {И сразу задание на восстановление
Name = "<Название задания>"
JobDefs = "BackupMySQLDump" #Наследуется от BackupMySQLDump
Client = <Название клиента>
}
Job {Клиент
Name = "<Название задания>"
Type = Restore
Client=Forge-fd
FileSet="MySQLDumpFileSet"
Storage = MySQLStorage-dir
Pool = MySQLPool
Messages = Standard
Where = /var/restore/
}
Client {Перезапускаем bacula
Name = <Название клиента>
Address =
FDPort = 9102
Catalog = MegapolisCatalog
Password = "<длинный пароль>" #тот самый пароль с клиента
}
/etc/init.d/bacula-director restartТеперь можно в bacula console (на сервере) проверить соединение с клиентом
bconsole
status client
<выбрать клиента>
Комментариев нет:
Отправить комментарий