powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужно восстановить упавшую репликацию
17 сообщений из 17, страница 1 из 1
Нужно восстановить упавшую репликацию
    #39173065
belikoviv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, господа и дамы.

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

Настройки на мастере, касающиеся репликации:
Код: sql
1.
2.
binlog-format = ROW
expire_logs_days = 5


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

Слэйв в очередной раз остановил репликацию из-за ошибки - это нечасто, но происходит. Обычно я замечаю, что репликация остановилась, устраняю проблему (как правило, достаточно бывает просто пропустить строку в логе, которая вызывала проблему - во всех моих случаях это не приводило к рассинхронизации) и запускаю репликацию с момента остановки:
Код: sql
1.
2.
3.
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;


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

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

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

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

Заранее спасибо за ответы.
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173074
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ этот раз остановка произошла более 5 дней назаду слейва пропуск в 5 дней. Что вы хотите, непонятно ...
Только дампом...
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173102
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belikovivполный бэкап (чтобы потом с него восстановить базы на слэйве) займет несколько часов - такой длительный простой крайне нежелателен.А нет иного выхода. У Вас просто нет информации для закрытия образовавшейся дырки. Единственное, что может вроде бы спасти - это программная синхронизация, и то при условии, что КАЖДАЯ запись в каждой таблице имеет штамп времени актуализации, но я не представляю, как потом запустить репликацию, вернее, как сообщить слейву, что текущее состояние БД на самом деле соответствует состоянию на заданный момент времени.
Так что придётся идти на нежелательные, но необходимые, действия.

PS. Вообще очень странно, что отслеживание работы механизма репликации выполняется "на глазок".
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173107
belikoviv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я хочу узнать - можно ли как-то использовать бинарные логи, которые слэйв вычитал с мастера.

Остановилась только часть репликации (запись в базу). Бинарные логи с момента остановки записи продолжали вычитываться (и продолжают сейчас) и сохраняться на слэйве. Т.е. по большому счёту те бинарные логи, которые уже удалены с мастера, на слэйве присутствуют...
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173115
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belikovivте бинарные логи, которые уже удалены с мастера, на слэйве присутствуют..
На слейве есть настройка, которая определяет, что более старые, чем expire_logs_days мастера, логи следует игнорировать? имхо запускайте репликацию на слейве... ну в конце концов сделайте копию БД перед этим - хотя какой смысл, если текущий инстанс БД фактически труп.
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173141
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belikoviv...
В этот раз остановка произошла более 5 дней назад
...
Т.е. по большому счёту те бинарные логи, которые уже удалены с мастера, на слэйве присутствуют...ПРОПУСК более в пять дней...слайв был заморожен и не получал ничего, у вас дырка будет по любому
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173183
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belikoviv...
Т.е. по большому счёту те бинарные логи, которые уже удалены с мастера, на слэйве присутствуют...
если это так, проверьте SHOW SLAVE STATUS и запускайте как раньше
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173186
belikoviv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinovbelikoviv...
В этот раз остановка произошла более 5 дней назад
...
Т.е. по большому счёту те бинарные логи, которые уже удалены с мастера, на слэйве присутствуют...ПРОПУСК более в пять дней...слайв был заморожен и не получал ничего, у вас дырка будет по любому
Наверное, я не очень точно выразился.
Вот статус слэйва:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
               Slave_IO_State: Waiting for master to send event
                  Master_Host: x.x.x.x
                  Master_User: xxxx
                  Master_Port: xxxx
                Connect_Retry: 60
              Master_Log_File: main.007702
          Read_Master_Log_Pos: 709799729
               Relay_Log_File: mysqld-relay-bin.003675
                Relay_Log_Pos: 518105673
        Relay_Master_Log_File: main.007647
             Slave_IO_Running: Yes
            Slave_SQL_Running: No


Т.е. вычитывание бинарных логов с мастера продолжается - значение Read_Master_Log_Pos увеличивается, значение Master_Log_File - текущий файл на мастере. И, очевидно, значение Slave_IO_Running как раз подтверждает, что вычитывание логов продолжается.

А вот Slave_SQL_Running как раз говорит, что прекратилась _обработка_ вычитанных логов.

Вот как бы так "извернуться", чтобы пропустить строку, которая слэйву "не понравилась", и продолжить обработку ранее вычитанных логов? Все файлы, начиная с указанного в Relay_Log_File, на слэйве присутствуют.
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173239
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите логи слейва, когда была ошибка.. найдите файл журнала от того времени, там и копать
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173249
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант - посмотреть номер ошибки репликации
на слейве добавить опцию типа
skip-error = N_error

чем это поможет не представляю
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173255
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой давности у вас файл relay
Relay_Log_File: mysqld-relay-bin.003675
он по идее и должен содержать что последнее забрано с binloga
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173257
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovкак вариант - посмотреть номер ошибки репликации
на слейве добавить опцию типа
skip-error = N_error

чем это поможет не представляю


...belikoviv -- вы как партизан на допросе -- надо
10 раз спрашивать какая ошибка была...
в статусе есть и номер ошибки и текст ошибки и даже квери...


если ошибка одноразовая то попробуйте:
>> STOP SLAVE;
>> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
>> START SLAVE;


такой вариант легче чем настройка сервера.

Учтите что репликацию будет уже НЕ идентичной источнику.
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173499
belikoviv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinovкакой давности у вас файл relay
Relay_Log_File: mysqld-relay-bin.003675
он по идее и должен содержать что последнее забрано с binloga
Нет, судя по дате - в нем последнее, что реплицировано в базу.
А самый свежий - mysqld-relay-bin.003843 (с текущим временем), и все файлы между 3675 и 3843 также присутствуют.
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173520
belikoviv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc...belikoviv -- вы как партизан на допросе -- надо
10 раз спрашивать какая ошибка была...
в статусе есть и номер ошибки и текст ошибки и даже квери...

Ну при чем здесь код ошибки! Я посмотрел, какая была ошибка, и в какой таблице была эта ошибка, и прикинул, что можно пропустить ту запись, которая эту ошибку вызывает.

А вопрос был другой - можно ли использовать "SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;", если на мастере более старые бинарные логи уже удалились.

Другими словами - если я сделаю STOP и START - репликация начнётся из тех файлов, которые уже вычитаны с мастера на слэйв, или слэйв попытается по новой начать вычитывать логи с мастера.

javajdbcесли ошибка одноразовая то попробуйте:
>> STOP SLAVE;
>> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
>> START SLAVE;

Вероятнее всего - не одноразовая, пропустить придётся и эту запись, и, возможно, ещё несколько штук, относящихся к той же строке в таблице. Но в данной конкретной ситуации это не критично.

javajdbcтакой вариант легче чем настройка сервера.

Учтите что репликацию будет уже НЕ идентичной источнику.
Да, я это прекрасно понимаю.
Повторюсь, в данной конкретной ситуации это не критично.
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173732
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belikovivА вопрос был другой - можно ли использовать "SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;", если на мастере более старые бинарные логи уже удалились.
1. конечно можно... релеи содержат всю прослойку информации для слейва,
2. по поводу ошибки - мне показалось вы хотите найти-понять-исправить.
3. SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; - как раз таки пропустит ОДНУ ошибку, если вы не хотите п.2
4. если ошибка повторяющаяся - можно поместить ее номер в my.conf (добавить строку skip-error = NumError), тем более если вам это не критично. Тогда возможно прекратятся и остановки слайва.
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173821
belikoviv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,

1. Спасибо, сейчас буду пробовать.
2. Не, для этого моего опыта достаточно. Иначе я бы сразу привёл информацию об ошибке.
3. Да, я этим пользовался. Но я (ошибочно) считал, что после STOP/START слэйв начинает по новой вычитывать все бинлоги с мастера.
4. Нет, пропускать ошибки автоматом я не хочу. Тот же код ошибки может возникнуть на другой таблице в другой базе - там, где пропуск одной строки репликации может быть критичным.
...
Рейтинг: 0 / 0
Нужно восстановить упавшую репликацию
    #39173910
belikoviv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы - всё получилось.
Остановил репликацию, пропустил одну строку, запустил репликацию.
Процесс продолжился из ранее вычитанных с мастера локальных бинлогов.

P.S. Очень странно видеть в статусе в Relay_Master_Log_File имена уже несуществующих на мастере файлов. Именно этот момент и сбивал меня с толку (т.е. я считал, что бинлоги с мастера _перечитываются_ после рестарта репликации) в предыдущие разы, когдя я таким же образом пропускал проблемные строчки.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужно восстановить упавшую репликацию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]