Рубріки: 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 станет стремиться к нулю.

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

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024