Резервное копирование баз данных, безусловно, одна из самых важных задач системного администрирования, ведь на них держится большая часть функционала любого проекта. Однако и одна из самых ресурсоемких. В средне и высоконагруженных проектах, бекап должен происходить максимально быстро и незаметно для ваших клиентов. Уже много лет стандартом де-факто в резервном копировании mysql является утилита mysqldump, она знакома и привычна системным администраторам, но может легко запутать большим количеством опций не искушенного пользователя. Мы заботимся о своих клиентах и поэтому хотели бы предложить вашему вниманию небольшую статью о настройке такого замечательного, и главное простого, инструмента как percona xtrabackup.
Установка
Пакет доступен для любого современного linux дистрибутива. Для примера, воспользуемся операционной системой CentOS 7.1
[root@test]$ yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
[root@test]$ yum install percona-xtrabackup -y
Далее, создадим файл настроек авторизации, в домашней директории нашего пользователя. /root/.my.cnf с таким содержимым:
[client]
user = root
pass = supersecretmysqlpassword
Теперь укажем путь, по которому размещаются файлы и каталоги mysql, по-умолчанию, данные хранятся в /var/lib/mysql Соответственно, указываем этот путь в секции mysqld файла /etc/my.cnf.d/server.cnf
. . .
[mysqld]
datadir=/var/lib/mysql
. . .
Почти готово! Осталось создать каталог, в котором будут хранится наши резервные копии.
[root@test]$ mkdir -p /backup/mysql
Проверим как работает:
[root@test]$ innobackupex /backup/mysql
#довольно большой вывод который мы опустим
innobackupex: Backup created in directory '/backup/mysql/2015-08-05_17-27-32'
150805 17:27:37 innobackupex: Connection to database server closed
150805 17:27:37 innobackupex: completed OK!
Как можно понять из лога, мы получили полный файловый бекап в каталоге /backup/mysql/2015-08-05_17-27-32
Восстановление
Просто сделать резервную копию явно недостаточно, обязательно нужно проверить возможность и корректность восстановления. Для этого нам необходимо выполнить несколько простых действий. Во-первых, удалить или переместить все файлы из рабочего каталога mysql. Для этого придется остановить сервиc.
[root@test]$ service mariadb stop
[root@test]$ mv /var/lib/mysql/* /tmp/
Теперь ещё раз запусти innobackupex, на этот раз воспользуемся ключом --copy-back для восстановления файлов обратно.
[root@test]$ innobackupex --copy-back /backup/mysql/2015-08-05_17-27-32
На всякий случай, поправим права на каталог и запустим mysql!
[root@test]$ chown -R mysql:mysql /var/lib/mysql
[root@test]$ service mariadb start
[root@test]$ service mariadb status
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)
Active: active (running) since Чтв 2015-08-06 10:28:23 EEST; 21min ago
. . .
Готово! база восстановлена до исходного состояния.