Что же мне нужно? Приложение или скрипт посредством которого я буду производить бекапирование баз данных сервера с учетом ряда определенных политик, писать самим скрипт, разбираться как и что для этого нужно — я считаю излишним — есть поставленная задача, и нужен инструмент. Если так хочется, то можно и найти время чтобы изобрести свой собственный велосипед никто же не спорит. Все дальнейшние действия буду проделывать на системе Ubuntu 12.04.5 Server amd64 с применением пакета AutoMySQLBackup который собственно и решает все мои проблемы с центром единого резервного копирования баз данных. По документации к этому пакету имеем следующее:
- Можно настроить ротацию создания бекапов (каждый день,неделю,месяц)
- Нужно ли сжимать базу
- Формировать лог
- Уведомлять по почте
- Куда перемещать бекап
- Организация единого центра хранения (все яйца в одну кучу).Ниже гр
убая модель единого центра хранения:
Итак скачиваю пакет с официального сайта:
Устанавливаю в систему пакет mysql:
ekzorchik@srv-serv:~$ sudo apt-get install mysql-server
ekzorchik@srv-serv:~$ wget http://downloads.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%203.0/automysqlbackup-v3.0_rc6.tar.gz
Распаковываю:
ekzorchik@srv-serv:~$ tar zxf automysqlbackup-v3.0_rc6.tar.gz
Устанавливаю запуска инсталляционного скрипта:
ekzorchik@srv-serv:~$ sudo ./install.sh
### Checking archive files for existence, readability and integrity.
automysqlbackup … exists and is readable … md5sum okay :)
automysqlbackup.conf … exists and is readable … md5sum okay :)
README … exists and is readable … md5sum okay :)
LICENSE … exists and is readable … md5sum okay :)
Select the global configuration directory [/etc/automysqlbackup]:
Select directory for the executable [/usr/local/bin]:
### Creating global configuration directory /etc/automysqlbackup:
success
### Copying files.
if you are running automysqlbackup under the same user as you run this install script,
you should be able to access it by running ‘automysqlbackup’ from the command line.
if not, you have to check if ‘echo $PATH’ has /usr/local/bin in it
Setup Complete!
После удаляю дефолтный шаблон:
ekzorchik@srv-serv:~$ sudo rm /etc/automysqlbackup/myserver.conf
Предопределяю параметры для автоматического резеврного копирования для текущего сервера и базы которая имеет место быть развернута здесь:
ekzorchik@srv-serv:~$ sudo nano /etc/automysqlbackup/automysqlbackup.conf
CONFIG_mysql_dump_username='root'
CONFIG_mysql_dump_password='712mbddr@'
CONFIG_mysql_dump_host='localhost'
CONFIG_backup_dir='/var/backup/db'
CONFIG_db_names=(glpi)
CONFIG_mysql_dump_port=3306
CONFIG_mysql_dump_compression='gzip'
# какие бд нужно игнорировать
CONFIG_db_exclude=( 'information_schema' 'performance_schema' 'mysql')
Создаю каталог местонахождения структуры формируемых файлов резервного копирования:
ekzorchik@srv-serv:~$ sudo mkdir -p /var/backup/db
На заметку: права у каталога /var/backup/db должны быть:
ekzorchik@srv-serv:~$ sudo chown -R root:root /var/backup/db
Запускаю приложение с привилегированными правами:
ekzorchik@srv-serv:~$ sudo ./automysqlbackup
Invoking backup method.
Parsed config file “/etc/automysqlbackup/automysqlbackup.conf”
# Checking for permissions to write to folders:
base folder /var/backup … exists … ok.
backup folder /var/backup/db … exists … writable? yes. Proceeding.
checking directory “/var/backup/db/daily” … creating … success.
checking directory “/var/backup/db/weekly” … creating … success.
checking directory “/var/backup/db/monthly” … creating … success.
checking directory “/var/backup/db/latest” … creating … success.
checking directory “/var/backup/db/tmp” … creating … success.
checking directory “/var/backup/db/fullschema” … creating … success.
checking directory “/var/backup/db/status” … creating … success.
# Testing for installed programs
WARNING: Turning off multicore support, since pigz isn’t there.
(ВНИМАНИЕ: Отключение поддержки многоядерных, так pigz нет.)
mysql … found.
mysqldump … found.
# Parsing databases … done.
AutoMySQLBackup version 3.0
http://sourceforge.net/projects/automysqlbackup/
Backup of Database Server – localhost
Databases – glpi
Databases (monthly) – glpi,mysql,performance_schema
Dump full schema.
Rotating 4 month backups for
Dump status.
Rotating 4 month backups for
Backup Start Time Sat Sep 26 08:57:40 MSK 2015
Daily Backup …
Daily Backup of Database ( glpi )
Rotating 6 day backups for glpi
Backup End Time Sat Sep 26 08:57:42 MSK 2015
Total disk space used for backup storage…
Size – Location
852K /var/backup/db
Полученный бекап:
ekzorchik@srv-serv:~$ ls /var/backup/db/daily/glpi/ -lh
total 788K — столько весит база.
-rw-r–r– 1 root root 787K Sep 26 08:57 daily_glpi_2015-09-26_08h57m_Saturday.sql.gz
По умолчанию хоть и многоядерность активирована, но существует возможность, что в процессе отработки скрипта в консоль лога работы будет выведена ошибка вида, а именно она и была в отчете запуска приложения выше, но и ниже я ее дублирую чтобы показать о чем идет речь:
WARNING: Turning off multicore support, since pigz isn’t there.
В основе утилиты для сжатия базы данных с использованием многоядерности лежит пакет pigz, но как обычно он по умолчанию не устанавливается. Скрипт AutoMySQLBackup в обычном режиме осуществляет сжатие базы данных через утилиту gzip, но вот для многоядерности она не подходит. Далее я практически рассмотрю, как поправить текущее положение дел применительно к системе Ubuntu 12.04.5 Server amd64:
ekzorchik@srv-serv:~$ apt-cache search pigz
pigz – Parallel Implementation of Gzip
Устанавливаем необходимый пакет — pigz:
ekzorchik@srv-serv:~$ sudo apt-get install pigz tree -y
Если же нужно осуществлять сжатие бд с использованием многоядерности, то параметр
CONFIG_multicore='yes'
Также можно для каждого сервера если данная система будет являться центровой создать конфигурационные файлы для каждого сервера с которого нужно будет делать резервное копирование, для этого нужно дефолтный шаблон automysqlbackup.conf переименовать под различные сервера, к примеру так:
ekzorchik@srv-serv:~$ sudo cp /etc/automysqlbackup/automysqlbackup.conf /etc/automysqlbackup/srv-glpi.conf
ekzorchik@srv-serv:~$ sudo nano /etc/automysqlbackup/srv-glpi.conf
CONFIG_mysql_dump_username='root'
CONFIG_mysql_dump_password='712mbddr@'
CONFIG_mysql_dump_host='10.7.8.154'
CONFIG_backup_dir='/var/backup/db'
CONFIG_mysql_dump_port=3306
CONFIG_mysql_dump_compression='gzip'
CONFIG_db_names=(glpi)
CONFIG_db_exclude=( 'information_schema' 'performance_schema' 'mysql')
CONFIG_mysql_dump_create_database='yes'
ekzorchik@srv-serv:~$ sudo cp /etc/automysqlbackup/automysqlbackup.conf /etc/automysqlbackup/srv-zoneminder.conf
На заметку: чтобы можно было подключаться к удаленным системам и осуществлять резервное копирование на удаленной системе должен быть предопределен параметр:
aollo@srv-glpi:~$ sudo nano /etc/mysql/my.cnf
# дефолтное значение
bind-address = 127.0.0.1
# разрешить Local & Remote подключения, просто поставить символ комментария
#skip-networking
bind-address = 0.0.0.0
разрешающий удаленное подключение
и дать права на подключение под учетной запись внутренного суперпользователя mysql, т. е. Root
aollo@srv-glpi:~$ mysql -u root -p712mbddr@ -h localhost -P 3306
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> GRANT ALL on *.* to root@'%' IDENTIFIED BY '712mbddr@';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
Далее для применения эффекта изменения конфигурационного файла потребуется перезагрузить сервис mysql:
aollo@srv-glpi:~$ sudo service mysql restart
Теперь запускаем скрипт с указанием определенного конфигурационного файла:
ekzorchik@srv-serv:~$ sudo ./automysqlbackup /etc/automysqlbackup/srv-glpi.conf
если в консоли вы видите:
Errors reported during AutoMySQLBackup execution.. Backup failed
Error log below..
ERROR 1130 (HY000): Host ‘10.7.8.165’ is not allowed to connect to this MySQL server
Значит у Вас не разрешено подключение к MySQL серверу удаленной системы под учетной запись root внутри MySQL. Если же все было правильно настроено, то скрипт успешно отработает:
ekzorchik@srv-serv:~$ sudo ./automysqlbackup /etc/automysqlbackup/srv-zoneminder.conf
Parsed config file “/etc/automysqlbackup/automysqlbackup.conf”
# Checking for permissions to write to folders:
base folder /var/backup … exists … ok.
backup folder /var/backup/db … exists … writable? yes. Proceeding.
checking directory “/var/backup/db/daily” … exists.
checking directory “/var/backup/db/weekly” … exists.
checking directory “/var/backup/db/monthly” … exists.
checking directory “/var/backup/db/latest” … exists.
checking directory “/var/backup/db/tmp” … exists.
checking directory “/var/backup/db/fullschema” … exists.
checking directory “/var/backup/db/status” … exists.
# Testing for installed programs
pigz … found.
mysql … found.
mysqldump … found.
# Parsing databases … done.
AutoMySQLBackup version 3.0
http://sourceforge.net/projects/automysqlbackup/
Backup of Database Server – 10.7.8.177
Databases — zm,cacti
Databases (monthly) – cacti,zm
Dump full schema.
Rotating 4 month backups for
Dump status.
Rotating 4 month backups for
Backup Start Time Sat Sep 26 10:28:04 MSK 2015
Daily Backup …
Daily Backup of Database ( zm )
Rotating 6 day backups for zm
Backup End Time Sat Sep 26 10:28:05 MSK 2015
Total disk space used for backup storage…
Size – Location
1.4M /var/backup/db
Отлично, чтобы каждый раз не запускать скрипт вручную, можно сделать скрипт следующего вида, предварительно перенеся утилиту automysqlbackup в каталог /usr/sbin:
ekzorchik@srv-serv:~$ sudo mv automysqlbackup /usr/sbin/
ekzorchik@srv-serv:~$ sudo mkdir /etc/script
ekzorchik@srv-serv:~$ sudo nano /etc/script/bd
#!/bin/bash
/usr/sbin/automysqlbackup /etc/automysqlbackup/srv-glpi.conf
/usr/sbin/automysqlbackup /etc/automysqlbackup/srv-zoneminder.conf
#{}probel\
find /var/backup/db* -type f -exec chmod 400 {} \;
find /var/backup/db* -type d -exec chmod 700 {} \;
ekzorchik@srv-serv:~$ sudo chmod +x /etc/script/bd
Запускаю скрипт:
ekzorchik@srv-serv:~$ sudo sh /etc/script/bd
После отработки скрипта никто на сервере кроме суперпользователя не сможет посмотреть содержимое бекапного каталога, за исключение если у него не разрешено повышение прав через sudo:
ekzorchik@srv-serv:~$ ls -l /var/backup/db
ls: cannot open directory /var/backup/db: Permission denied
ekzorchik@srv-serv:~$ sudo ls -l /var/backup/db
total 28
drwx—— 5 root root 4096 Sep 26 10:32 daily
drwx—— 2 root root 4096 Sep 26 11:49 fullschema
drwx—— 2 root root 4096 Sep 26 08:57 latest
drwx—— 2 root root 4096 Sep 26 08:57 monthly
drwx—— 2 root root 4096 Sep 26 11:49 status
drwx—— 2 root root 4096 Sep 26 11:49 tmp
drwx—— 2 root root 4096 Sep 26 08:57 weekly
Проверяю, что бекапы создались:
ekzorchik@srv-serv:~$ sudo tree -l /var/backup/db/daily
Работает, теперь можно либо внутри каждого конфигурационного файла настроить план резервного копирования либо просто поместить данный исполняемый файл в планировщик заданий на каждый день:
ekzorchik@srv-serv:~$ sudo cp /etc/script/bd /etc/cron.daily/
Ну что ж я давно искал такой инструмент написанный мастером своего дела, мне бы честно говоря пришлось бы слишком туго, да и ошибок я сделал бы не мало писав свой собственный скрипт, а так я воспользовался трудом другого человека, за что ему огромнейшая благодарность от меня. Теперь я выполнил еще один пункт насчет как посредством одного инструмента осуществлять резервное копирование подконтрольных баз данных. А процедуры восстановления из бекапа я уже много раз отработал, составив пошаговые инструкции к разворачиваемым сервисам. Считаю, что лучше перестраховать и иметь заготовки для повседневной деятельности, чтобы потом не было оправданий в глазах руководства, да и не обидно самому себе, что бекапа нет и сервис не восстановить. На этом считаю заметку завершенной, что либо еще на этой тему я обязательно опубликую на своем блоге чуточку позже. До встречи, с уважением автор блога — ekzorchik.