SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.02.2016 12:18:36

IVB
Участник
Зарегистрирован: 17.02.2016
Сообщений: 3

Нужно восстановить упавшую репликацию

Доброго времени суток, господа и дамы.

Есть два MySQL сервера, с мастера на слэйв настроена репликация.

Настройки на мастере, касающиеся репликации:

Код:

binlog-format = ROW
expire_logs_days = 5

(если выставить более 5 дней - есть вероятность забить весь диск)

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

Код:

STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;

В этот раз остановка произошла более 5 дней назад - соответственно, бинарные логи на мастере, старшие 5 дней, уже удалились.

Слэйв продолжает вычитывать бинарные логи с мастера и складывает их в свои логи.

Вопрос: существует ли возможность пропустить проблемную строку и продолжить репликацию с тех бинарных логов, которые слэйв вычитал с мастера и сохранил у себя?

Базы на мастере достаточно объемные, полный бэкап (чтобы потом с него восстановить базы на слэйве) займет несколько часов - такой длительный простой крайне нежелателен.

Заранее спасибо за ответы.

Неактивен

 

#2 17.02.2016 13:14:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Нужно восстановить упавшую репликацию

Да, тот же способ должен работать smile

Неактивен

 

#3 17.02.2016 13:18:31

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Нужно восстановить упавшую репликацию

SQL_SLAVE_SKIP_COUNTER действует только на SQL-тред, то есть он пропустит одно событие в relay-логе на слейве. Поэтому должно сработать.

Для бэкапа не нужно останавливать мастер. Используйте Percona XtraBackup.

Неактивен

 

#4 17.02.2016 14:45:53

IVB
Участник
Зарегистрирован: 17.02.2016
Сообщений: 3

Re: Нужно восстановить упавшую репликацию

rgbeast написал:

SQL_SLAVE_SKIP_COUNTER действует только на SQL-тред, то есть он пропустит одно событие в relay-логе на слейве. Поэтому должно сработать.

OK, я этого не знал.

rgbeast написал:

Для бэкапа не нужно останавливать мастер. Используйте Percona XtraBackup.

Да, действительно - у XtraBackup есть специальный режим по созданию бэкапов для слэйва без остановки мастера. Это несомненный плюс. Вот только это не спасает от блокировки MyISAM таблиц, которых у нас подавляющее большинство. Именно из-за того, что при бэкапе лочатся таблицы (а у "больших" БД это довольно длительный промежуток времени) мы и запустили репликацию. Т.е. мастер реплицируется на слэйв, а уже со слэйва делаются бэкапы.

Спасибо за обе подсказки (и по SQL_SLAVE_SKIP_COUNTER, и по XtraBackup).

Попробую "пропихнуть" репликацию. Ну, а если не получится - тогда уж придётся воспользоваться XtraBackup.

Неактивен

 

#5 18.02.2016 11:18:26

IVB
Участник
Зарегистрирован: 17.02.2016
Сообщений: 3

Re: Нужно восстановить упавшую репликацию

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson