Рубріки: Highload

Как восстановить MySQL репликацию без выключения?

admin

Часто сервер MySQL необходимо включить в реплику прямо во время его работы без всяких пауз и даунтаймов самого приложения. Сделать это можно с помощью утилиты Xtrabackup. Весь процесс занимает 3 шага:

1. Настройка мастера

Этот пункт нужно пропустить, если мастер уже настроен.
Это нужно сделать только один раз.
Логинимся на мастер сервер и добавляем в секцию [mysql] конфига my.cnf:

server-id = 1
binlog-format = mixed
log-bin = mysql-bin
sync_binlog = 1

После этого перезапускаем сервер (команды выполняем на мастере):

/etc/init.d/mysql restart

Мы включили бинарные логи, которые нужны для работы репликации. Это единственная перезагрузка, которая понадобится за весь процесс. Далее устанавливаем права доступа для реплики:

GRANT REPLICATION SLAVE ON *.*  TO 'replica'@'10.10.0.2' IDENTIFIED BY 'BZLVT3BthaEB';

# 10.10.0.2 – ip сервера, который будет служить слейвом

2. Копирование данных

Готовим данные для копирования (команды выполняем на мастере):

innobackupex --user=root --password=pwd /root

# самая медленная операция

Накатываем лог на данные в созданной папке (например, /root/2019-02-09_21-02-52)

innobackupex --user=root --password=pwd --apply-log /root/2019-02-09_21-02-52

# пройдет в несколько раз быстрее, чем предыдущая

Копируем эту же папку на слейв:

scp -r /root/2019-02-09_21-02-52 root@10.2.0.2:/root/master

MySQL нового слейва должен быть остановлен. Готовим данные (команды выполняем на слейве):

rm -rf /var/lib/mysql
mv /root/master /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql

/etc/init.d/mysql start

3. Включение репликации

Перед включением выясняем название и позицию бинарного лога:

cat /var/lib/mysql/xtrabackup_binlog_info

Результат будет иметь такой вид:

mysql-bin.000001 15386388

После этого выполняем такой MySQL-запрос на слейве используя эти данные:

CHANGE MASTER TO MASTER_HOST='10.10.0.1',
MASTER_USER='replica', MASTER_PASSWORD='BZLVT3BthaEB',
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=15386388;

# 10.10.0.1 – ip нашего мастера

И еще один запрос тут же для запуска реплики:

SLAVE START;

Проверяем статус репликации:

SHOW SLAVE STATUSG
...
Slave_IO_Running: Yes
...
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 13
...

# Все хорошо и реплика работает

Ждем пока Seconds_Behind_Master станет стремиться к нулю.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023