Percona XtraBackup. Установка и настройка на CentOS

В этой заметке я опишу свой процесс установки, настройки и использования утилиты для создания резервной копии баз  MySQL, которая называется Percona XtraBackup. Ниже описанные действия происходят в системе CentOS 7.

Для начала я обращаюсь к первоисточнику информации, т.е. на официальный сайт. На данный момент доступна версия 2.4. Перехожу в нужный раздел и смотрю варианты установки. Устанавливаем репозиторий.

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

Проверяем доступность пакетов в репозитории.

yum list | grep percona

У меня выдало достаточно много информации. Вот фрагмент.

....
Percona-XtraDB-Cluster-test-57.x86_64 5.7.16-27.19.1.el7 percona-release-x86_64
jemalloc-debuginfo.x86_64 3.3.1-1.el7 percona-release-x86_64
libtokumx-enterprise.x86_64 2.0.2-1.el7 percona-release-x86_64
libtokumx-enterprise-devel.x86_64 2.0.2-1.el7 percona-release-x86_64
percona-cacti-templates.noarch 1.1.7-2 percona-release-x86_64
percona-nagios-plugins.noarch 1.1.7-2 percona-release-x86_64
percona-toolkit.noarch 2.2.20-1 percona-release-noarch
percona-xtrabackup.x86_64 2.3.6-1.el7 epel
percona-xtrabackup-22.x86_64 2.2.13-1.el7 percona-release-x86_64
percona-xtrabackup-22-debuginfo.x86_64 2.2.13-1.el7 percona-release-x86_64
percona-xtrabackup-24.x86_64 2.4.5-1.el7 percona-release-x86_64
percona-xtrabackup-24-debuginfo.x86_64 2.4.5-1.el7 percona-release-x86_64
....

Установка

yum install percona-xtrabackup-24

Подготовка пользователя mysql

mysql -u root -p
CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'bkppassword';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
FLUSH PRIVILEGES;
exit

Выставляем нужные права на каталог.

sudo chown -R mysql: /var/lib/mysql
sudo find /var/lib/mysql -type d -exec chmod 775 "{}" \;

Бэкап

Для создания бэкапа выполняю команду.

sudo innobackupex --user=bkup  --password=host3up --no-timestamp /data/backups/new_backup

Тут уже вбиты мои имя пользователя и пароль (помечено красным). Пароль простой, т.к. выполняю всё теста на локальной машине.

Если возникает такого рода ошибка:

InnoDB: Error: log file ./ib_logfile0 is of different size 5242880 bytes
InnoDB: than specified in the .cnf file 50331648 bytes!

Вариант решения по ссылке — https://ruhighload.com/post/Mysql+error+ib_logfile0+is+of+different+size

В моём случае на debian в файле /etc/mysql/my.cnf не было строчки innodb_log_file_size = 5M и я её добавил.

Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at - line 693.
BEGIN failed--compilation aborted at - line 693.
170210 23:35:06 Connecting to MySQL server host: localhost, user: bkup, password: set, port: 0, socket: /var/lib/mysql/mysql.sock
Using server version 5.5.52-MariaDB
Error: failed to execute query SHOW ENGINE INNODB STATUS: Access denied; you need (at least one of) the PROCESS privilege(s) for this operation

Тут две ошибки. Обходим эти грабельки. Устанавливаю Diest-MD5

sudo yum install perl-Digest-MD5

И заходим в mysql, там выполняем команду, которая устранит вторую ошибку с Access denied:

GRANT SELECT, PROCESS ON *.* TO 'bkup'@'localhost';

Теперь повторяю команду резервного копирования.

sudo innobackupex --user=bkup  --password=host3up --no-timestamp /data/backups/new_backup

Всё проходит успешно. В нужной директории я получаю файлы бэкапа.

[root@localhost new_backup]# ls -l
 итого 18456
 -rw-r----- 1 root root 417 фев 10 23:49 backup-my.cnf
 -rw-r----- 1 root root 18874368 фев 10 23:49 ibdata1
 drwxr-x--- 2 root root 4096 фев 10 23:49 mysql
 drwxr-x--- 2 root root 4096 фев 10 23:49 performance_schema
 drwxr-x--- 2 root root 301 фев 10 23:49 wphost3
 -rw-r----- 1 root root 113 фев 10 23:49 xtrabackup_checkpoints
 -rw-r----- 1 root root 456 фев 10 23:49 xtrabackup_info
 -rw-r----- 1 root root 2560 фев 10 23:49 xtrabackup_logfile

Данный вариант позволит создать только один бэкап. Если повторить команду ещё раз, то будет ошибка, т.к. файлы бэкапа уже существует и не будут перезаписываться.  Можно пропустить флаг —no-timestamp, чтобы программа XtraBackup создала каталог резервного копирования с текущей временной меткой. Выполнив команду повторно, я получил бэкап в тот же каталог и туда был добавлен файл с временной меткой.

drwxr-x--- 5 root root 175 фев 11 00:02 2017-02-11_00-02-06
 -rw-r----- 1 root root 417 фев 10 23:49 backup-my.cnf
 -rw-r----- 1 root root 18874368 фев 10 23:49 ibdata1

Если выполнить ещё раз, опять будет создан файл с временной меткой и т.д.

drwxr-x--- 5 root root 175 фев 11 00:02 2017-02-11_00-02-06
 drwxr-x--- 5 root root 175 фев 11 00:08 2017-02-11_00-07-58
 -rw-r----- 1 root root 417 фев 10 23:49 backup-my.cnf
 -rw-r----- 1 root root 18874368 фев 10 23:49 ibdata1

Использование бэкапа.

Для использования бэкапа необходимо его подготовить.

innobackupex --apply-log /data/backups/new_backup

Данная команда применит к базе все последние действия, которые происходили с ней во время бэкапа (чтобы не останавливать работу базы, эти действия писались в лог).

Чтобы восстановление шло быстрее, если позволяют ресурсы, то можно использовать опцию use-memory:

innobackupex --apply-log --use-memory=4G /path/to/BACKUP-DIR

Теперь искусственно вызываем ситуацию, чтобы воспользоваться бэкапом. Останавливаем СУБД и безопасно переносим рабочие базы во временную папку.

systemctl stop mariadb
mkdir /tmp/mysql
mv /var/lib/mysql/* /tmp/mysql/

Если запустить СУБД, то мой тестовый хост покажет:

Error establishing a database connection

Всё можно исправить командой:

innobackupex --copy-back /data/backups/new_backup

Она должна восстановить все базы на место. Файлы восстановленного бэкапа имеют права того пользователя, который делал восстановление. Поэтому это дело необходимо исправить, отдав права mysql. И запустить снова СУБД.

sudo chown -R mysql: /var/lib/mysql
sudo systemctl start mariadb

Теперь все базы успешно восстановлены. Проверяю доступен ли мой тестовый хост и правильно ли он функционирует. Всё в порядке.

Автоматические копии

Неплохо было бы, если копии создавались самостоятельно без участия пользователя. Для этого я создам скрипт и буду запускать его при помощи cron.

#!/bin/bash
sudo innobackupex --user=bkup --password=host3up /data/backups/new_backup

Дам ему права на выполнение.

chmod +x bkup.sh

И прописываю в cron (для теста какое-нибудь частый интервал, чтобы следить работу). Например, раз в час.

0 */1 * * * root /var/mybash/bkup.sh

При написании данной статьи использовался материал ТЫЦ.

Добавить комментарий