Как восстановить репликацию MySQL или MariaDB

Если кластер работает в режиме Master — Master, сначала найдем ноду, на которой произошел сбой репликации. Для этого заходим на каждом сервере в оболочку mysql следующей командой:

mysql -uroot -p

* в данном примере заходим от имени пользователя root .

И выводим состояние ноды в режиме Slave:

mysql> SHOW SLAVE STATUSG

В случае проблем с репликацией мы увидим значения Slave_IO_Running и/или Slave_SQL_Running в состоянии No , а также описание ошибки:

Состояние нерабочей репликации MySQL

На Master ноде

Блокируем все таблицы всех баз для чтения и записи:

mysql> FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON;

И выводим состояние работы СУРБД:

mysql> show master statusG

Результат будет, примерно, таким:

File: mysql-bin.000015
Position: 6315
Binlog_Do_DB:
Binlog_Ignore_DB: information_schema,mysql

Запомним или запишем значения для File и Position . Они понадобятся при восстановлении вторичной ноды кластера.

Теперь выходим из командной оболочки базы:

mysql> quit

и создаем дамп рабочих баз:

mysqldump -uroot -p —databases db1 db2 > /tmp/mydb_dump.sql

* данная команда сделает дамп баз db1 , db2 и сохранит его в файл /tmp/mydb_dump.sql .

Теперь снова подключаемся к MySQL:

mysql -uroot -p

и снимаем ранее установленные блокировки:

mysql> SET GLOBAL read_only = OFF;

Отключаемся:

mysql> quit

Полученный ранее файл с резервной копией переносим на второй сервер при помощи такой команды:

scp /tmp/mydb_dump.sql remontka@192.168.166.156:/tmp

* в данном примере, мы скопируем созданный нами дамп /tmp/mydb_dump.sql в каталог /tmp сервера 192.168.166.156 подключившись под учетной записью remontka .

На нерабочей ноде

Заходим в оболочку управления MySQL:

mysql -uroot -p

Останавливаем репликацию:

mysql> stop slave;

Удаляем старые базы:

mysql> drop database db1;

mysql> drop database db2;

* в данном примере удаляются базы, для которых мы сделали резервные копии.

И создаем их заново:

mysql> CREATE DATABASE db1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

mysql> CREATE DATABASE db2 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

Выходим из оболочки:

mysql> quit

Теперь восстанавливаем базы из ранее созданного дампа:

mysql -uroot -p < /tmp/mydb_dump.sql

… или если создавалась резервная копия для одной базы, команда будет с указанием этой базы:

mysql -uroot -p db < /tmp/mydb_dump.sql

Опять подключаемся к СУБД:

mysql -uroot -p

и вводим команду (с использованием данных, полученных с мастера командой show master status ):

mysql> change master to master_host = «192.168.166.155», master_user = «replmy», master_password = «password», master_log_file = «mysql-bin.000015», master_log_pos = 6315;

* где:

  • 192.168.166.155: IP-адрес моего первого сервера.
  • replmy: учетная запись для репликации, которая была создана при создании кластера.
  • password: пароль для учетной записи replmy .
  • mysql-bin.000015: имя файла, которое мы должны были записать или запомнить (у вас может быть другим).
  • 6315: номер позиции, с которой необходимо начать репликацию (также должны были записать или запомнить ранее).

Запускаем репликацию следующей командой:

mysql> start slave;

И проверяем состояние репликации:

mysql> SHOW SLAVE STATUSG

Состояние Slave_IO_Running и Slave_SQL_Running должно быть Yes , а ошибки должны исчезнуть:

Состояние восстановленной репликации MySQL

Читайте также

Некоторые полезные инструкции:

1. Как настроить кластер MariaDB / MySQL .

2. Пример скрипта на Python для мониторинга состояния репликации MariaDB / MySQL .

3. Пример скрипта для создания резервной копии MySQL .

4. Установка MariaDB-server на Rocky Linux или Ubuntu .

5. Как сделать дамп базы MySQL / MariaDB .

6. Как восстановить базу MySQL из резервной копии .

EnglishRussianUkrainian