Резервное копирование всех баз данных

Posted by

Что же мне нужно? Приложение или скрипт посредством которого я буду производить бекапирование баз данных сервера с учетом ряда определенных политик, писать самим скрипт, разбираться как и что для этого нужно — я считаю излишним — есть поставленная задача, и нужен инструмент. Если так хочется, то можно и найти время чтобы изобрести свой собственный велосипед никто же не спорит. Все дальнейшние действия буду проделывать на системе .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.

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

1 × 5 =