Если кластер работает в режиме Master – Master, сначала найдем ноду, на которой произошел сбой репликации. Для этого заходим на каждом сервере в оболочку mysql следующей командой:
# mysql -uroot -p
* в данном примере заходим от имени пользователя root.
И выводим состояние ноды в режиме Slave:
mysql> SHOW SLAVE STATUS\G
В случае проблем с репликацией мы увидим значения Slave_IO_Running и Slave_SQL_Running в состоянии No, а также описание ошибки:
На рабочей Master-ноде
Блокируем все таблицы всех баз для чтения и записи:
mysql> FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON;
И выводим состояние работы СУРБД:
mysql> show master status\G
Результат будет, примерно, таким:
File: mysql-bin.000015
Position: 6315
Binlog_Do_DB:
Binlog_Ignore_DB: information_schema,mysql
Запомним или запишем значения для File и Position. Они понадобятся при восстановлении вторичной ноды кластера.
Теперь выходим из командной оболочки базы:
mysql> \q
и создаем дамп рабочих баз:
# mysqldump -uroot -p -v –databases db1 db2 > /tmp/mydb_dump.sql
* данная команда сделает дамп баз db1, db2 и сохранит его в файл /tmp/mydb_dump.sql.
Полученный файл с резервной копией переносим на второй сервер при помощи такой команды:
# scp /tmp/mydb_dump.sql dmosk@192.168.166.156:/tmp
* в данном примере, мы скопируем созданный нами дамп /tmp/mydb_dump.sql в каталог /tmp сервера 192.168.166.156 подключившись под учетной записью dmosk.
Теперь снова подключаемся к MySQL:
# mysql -uroot -p
и снимаем ранее установленные блокировки:
mysql> SET GLOBAL read_only = OFF;
На нерабочей ноде
Создаем дамп баз:
# mysqldump -uroot -p -v –databases db1 db2 > /tmp/mydb_dump_slave.sql
Заходим в оболочку управления 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> \q
Теперь восстанавливаем базы из ранее созданного дампа:
# mysql -v -uroot -p < /tmp/mydb_dump.sql
Опять подключаемся к СУБД:
# mysql -uroot -p
и вводим такую команду:
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 STATUS\G
Состояние Slave_IO_Running и Slave_SQL_Running должно быть Yes, а ошибки должны исчезнуть: