Горячие бэкапы и MySql репликация

Настройка MySql репликации

это то что обычно нужно делать достаточно часто — слейвы умирают, репликация падает, данные из таблиц становятся не актуальны, поднимаются тестовые площадки. А значит, нужна быстрая настройка слейвов.

Каждый раз когда нужно запустить новый слейв — мы начинаем с полного копирования реплицируемых баз данных.

Обычно для этой цели используется верный и проверенный способ mysqldump. Он требует блокировки всех таблиц на время своего снятия. Если мы имеем дело с большой БД этот способ может занимать достаточно длительное время(в это время БД находиться в состоянии только чтение). Конечно, если у Вас есть дополнительный слейв на котором, вы себе все это можете этот — вопрос отпадает. Но, не нужно забывать, что время на поднятие дампа на «чистом» слейве все равно громадно.

Существенно экономившем выходом из сложившейся ситуации является — горячий бэкап БД. Проудкт Percona позволяет снимать горячие бэкапы с рабочей MySql никак не блокируя таблицы. Хочу сразу подчеркнуть, что такая работа возможна только с таблицами InnoDB. К счастью, сейчас нам не обязательно вдаваться в подробности реализации – можем просто наслаждаться рабочими бэкапами.

Вот короткое руководство как используя xtrabackup создать быстро рабочий slave в репликации:

1.Установить горячие бэкапы xtrabackup

$ rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
$ yum install -y xtrabackup

архив по умолчанию располагается так: /data/backup/2012-08-03_14-56-45/

2.Применить байнари логи

Так как дамп который мы сняли в первичном виде больше похож на состоянии папки с базами данных MySql. То для того, чтобы мы могли его нормально устанавливать на другой сервер нужно накатить на него байнари логи, где содержится информация о транзакциях,которые были в незаконченном состоянии в момент снятия дампа.

Для того чтобы применить их нужно выполнить следующий скрипт:

$ innobackupex --apply-log /data/mysql/backup/2012-08-03_14-56-45/

3.Копируем полученную папку на новый слейв

scp -r /data/mysql/backup/2012-08-03_14-56-45 root@slaveIP:/root/data/

4.Останавливаем MySql на слейве

$ /etc/init.d/mysql stop

5.Меняем содержимое папок

$ cd /var/lib/
$ mv mysql mysqlold
$ mv /root/data ./mysql

6.Правим настройки MySql my.cnf

Как минимум нужно задать уникальный идентификатор сервера server_id. Также, возможно, стоит проверить настройки InnoDb.

7.Запускаем MySql на слейве

$ /etc/init.d/mysql start

8.Последние штрихи

Есть приятная вещь — xtrabackup снимает бэкап вместе с информацией master info. То есть достаточно легко можем найти последний файл, который писал мастер и его позицию в этом файле: $ tail /data/mysql/xtrabackup_binlog_infolog_bin.000002

9.Теперь выставляем настройки для слейва:

mysql> change master to, 
master_user=’rep’,
master_password=’rep’,
master_host=’10.20.30.40′,
master_log_file=’log_bin.000027′,
master_log_pos= 2973624;

10.Запускаем!

start slave;
Проверяем:
show slave status\G;
Есди все нормально должны увидеть следующие строчки:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Что получили?

Уверен, когда Вы несколько раз сделаете установку нового слейва с помощью горячего бэкапа xtrabackup, почувствуете как существенно уменьшилось время на настройку и запуск.

Если вдруг возникнут какие-либо вопросы в процессе утсановки — пишите, с удовольствием отвечу.

comments powered by Disqus