
Denis 災 nobody
07.03.2018
15:28:02
если был skip_counter то отдельные ключи могут быть не те, но само оно не может пролететь, значит это ожидаемо

Alexander
07.03.2018
15:28:05
везет )
за скип каунтер

Google

Denis 災 nobody
07.03.2018
15:28:25
может у вас с железом беда?

Alexander
07.03.2018
15:28:34
нет

Denis 災 nobody
07.03.2018
15:29:19
за скип каунтер
иногда норм, при анализе Last_IO_Errno и осознания что скипаем, если это битрикс и там на какой-то хер логи всякие, то скипать смело. Там же нет синхронизации, только редамп

Alexander
07.03.2018
15:29:47
мы так не делаем

Denis 災 nobody
07.03.2018
15:29:58
ламеры ))
так, вопрос в другом

Dmitry
07.03.2018
15:30:24
бывают разные ситуации, когда только skip counter и помогает.

Alexander
07.03.2018
15:30:50
дамп-рестор и стоп слейв
и чендж мастер ту
и старт слейв
скипы до хорошего не доведут

Dmitry
07.03.2018
15:32:33
прикол весь в том, что (насколько мне известно) не существует способа сказать мускулу на слейве "ничего не писать, принимать только запросы на чтение". Мускул - не постгрес. Криво написанное приложение может сделать запрос, который внесёт какое-нибудь изменение в слейв. А потом с мастера прилетит строчка и возникнет конфликт.

Google

Aleks
07.03.2018
15:36:24

Dmitry
07.03.2018
15:36:31
костыли.
я говорю лишь о том, что
бывают разные ситуации, когда только skip counter и помогает.
некоторые запросы также могут выполняться с разным результатом на мастере и слейве. Простой пример - удаление с лимитом может удалить разные строки на мастере и слейве вообще запросто.
т.е. делаем запрос "delete ... limit XXX" на мастере и получаем рассинхрон. А потом конфликт.

Alexander
07.03.2018
15:39:53
если вы в слейве удаляете - сами себе буратины

Dmitry
07.03.2018
15:40:29
я привёл пример ситуации, когда запрос, выполненный НА МАСТЕРЕ, приводит к разным состояниям мастера и слейва.

Alexander
07.03.2018
15:40:49
так не бывает
такое может быть только в одном случае - отключить запись в бинлог

Dmitry
07.03.2018
15:42:12
да легко. У меня заббикс работает с мускулом, который реплицируется на слейв для бэкапа и горячего резерва. Так я его мониторю на предмет различий между мастером и слейвом раз в неделю. И почти постоянно есть разница в таблицах history из-за того, что housekeeper выполняет именно удаление с лимитом.

Alexander
07.03.2018
15:42:32

Dmitry
07.03.2018
15:42:41
вы вероятно сильно привыкли к постгресу? в мускульном бинлоге пишутся запросы, а не изменения файлов базы.

Alexander
07.03.2018
15:42:42
слейв тупо получает инфу из бинлога

Dmitry
07.03.2018
15:43:01
и что?
да так, ничего. Просто так БЫВАЕТ. И с этим надо считаться.

Alexander
07.03.2018
15:43:05
не бывает
что-то не то
иначе был бы конец света
есть мастер. от мастера мы знаем только имя бинлога и позицию

Google

Alexander
07.03.2018
15:43:41
и есть слейв
который файл этот и читает
все

Dmitry
07.03.2018
15:43:52
просто если происходит удаление с лимитом, то надо избегать ситуаций, когда с оставшимися данными происходят какие-то ещё операции.

Alexander
07.03.2018
15:44:02
какая разница?
все идет в бинлог

Dmitry
07.03.2018
15:44:10
блджад.

Alexander
07.03.2018
15:44:12
и у нас иннодб
блджад кхйуй

Dmitry
07.03.2018
15:44:21
мы на разных языках общаемся, вероятно.

Alexander
07.03.2018
15:44:27
я на русском
все изменения мастера реплицируются на слейв

Alexander
07.03.2018
15:44:38
тчк

Dmitry
07.03.2018
15:45:20
в бинлоге пишутся запросы. Не изменения файлов, а запросы. С мастера через бинлог прилетает запрос, который слейв выполняет параллельно с мастером. Результат выполнения запроса на мастере и слейве может быть разным.

Alexander
07.03.2018
15:46:32
будут разные из-за временного лага
когда лаг уходит - все ок

Dmitry
07.03.2018
15:47:26
вы сильно привыкли к постгресу.
в нём - да, всё так.
в нём слейв вообще не выполняет запросы мастера. Он получает изменения бинарных данных файлов.

Alexander
07.03.2018
15:47:52
в мускуле тоже так

Google

Kolunchik
07.03.2018
15:47:57
https://dev.mysql.com/doc/refman/5.7/en/replication-formats.html

Alexander
07.03.2018
15:48:05
нене
пока рано карты из рукава доставать

Dmitry
07.03.2018
15:48:19
погуглите deterministic function в mysql.

Alexander
07.03.2018
15:48:20
пока не пойму что хотят доказать

Denis 災 nobody
07.03.2018
15:52:08

Shazo
07.03.2018
15:52:54

Denis 災 nobody
07.03.2018
15:53:02
еще есть GTID
еще бывает с автоинкрементом косяк, разные номера строк

Admin
ERROR: S client not available

Dmitry
07.03.2018
15:54:47
да мало ли чего бывает такого, от чего помогает только skip counter. С чего собственно разговор и начался.)

Denis 災 nobody
07.03.2018
15:54:59
при row-based данных много, зато оно синхронно
по задумке, оптимальный должен быть mixed

Shazo
07.03.2018
15:55:50
что и прописано в документации)

Dmitry
07.03.2018
15:56:10
да, об этом я тоже в курсе, уже даже забыть успел. Потому что в сложных проектах уже давно с постгресом работаю, с которым проблем таких исчезающе мало. Что в любом случае не отменяет факта - вполне возможны ситуации, когда запрос на мастере приводит к рассинхрону данных между мастером и слейвом.

Denis 災 nobody
07.03.2018
15:56:40
скип - когда есть понимание что поехала инфа но репликация важнее
хотя бы до спада нагрузки пережить

Dmitry
07.03.2018
15:57:24
восстанавливаем реплику, потом синхронизируем данные перкона тулзами и готово.
безопасно и без даунтаймов

Google

Denis 災 nobody
07.03.2018
15:58:42
мускуль завез синхронизацию? О_О
я там только дикие костылищи видел

Alexander
07.03.2018
15:59:30

Denis 災 nobody
07.03.2018
15:59:48
с вычислениями мд5?
оно и было
Итак, повторю вопрос (скрипты уже глянул, ничего интересного)
хочу сделать триггер на show slave status для мускуля, с грепом Seconds_Behind_Master
Могу ли я сделать сбор этого времени и при этом триггер на значение NULL? Или надо тогда вместо NULL отдать что-то типа -1 и уже реагировать на такие числа? И хорошо бы учесть ещё, если вдруг репликация не поднята, то есть греп будет просто пустым. Надо что-то типа -2 или можно так оставить и потом проверять на ""?

Dmitry
07.03.2018
16:03:05
именно поэтому лучше мониторить ошибку отдельно. Особенно если это всё равно в планах.

Denis 災 nobody
07.03.2018
16:04:02

Dmitry
07.03.2018
16:05:13
я решал ту же задачу когда-то. Можно, но грязный это способ и не очевидный. Влечёт сложности в будущей поддержке.

Denis 災 nobody
07.03.2018
16:05:56
к тому же, надо тогда и Last_SQL_Errno ловить - если что-то не так в SQL части, в IO будет всё ок а в seconds - null

Dmitry
07.03.2018
16:06:05
так чтобы предельно чисто и понятно - +1 элемент на ошибку. Особенно если его всё равно планируется мониторить.
аа. Вот чо вспомнил.
в errno 0, а в секундах null - возможно только в случае, когда слейв остановлен.
у меня это как раз один из кейсов, которые мне надо было предусмотреть - чтобы заббикс не триггерил алерт, когда слейв остановлен для снятия бэкапа.

Denis 災 nobody
07.03.2018
16:08:12

Dmitry
07.03.2018
16:08:29
так если слейв вручную остановлен, это как минимум санкционированно.
ну короче, вот теперь я точно всё вспомнил. :) Если хочется мониторить в т.ч. состояние, когда слейв остановлен, но не запущен (скрипт сфейлился, админ забыл запустить, итп) - тогда да, надо. Я в моём случае мониторю nodata на секунды, триггер срабатывает в случае отсутствия данных более 3 часов.
но это уже такая капитальная "защита от дурака", на самом деле. Но нужная на всякий случай, да. Впрочем, у меня этот триггер никогда не срабатывал.)

Nato
07.03.2018
17:56:23
Добрый вечер ребята. Есть такое проблема все проблемы и решении высвечивается по 2 раза.