Size: a a a

2018 May 11

AK

Alexey Kopytov in ru_mysql
løst søul
Всем доброго дня. Есть такой вопрос: можно ли в одной топологии репликации совместить классическую репликацию на основе позиций в журналах и gtid-репликацию, с условием, чтобы на оконечных слейвах использовалась автопозиция? Или попытки будут тщетны, и это технически не реализовать из-за разных протоколов репликации?
привет! совместить можно, протокол один, и есть возможноть постепенного перевода кластера с анонимных транзакций на GTID. но автопозиция несовместима с анонимными транзакциями. Вот тут таблица, ну и вся страница с подробностями: https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-concepts.html#idm140511347069312
источник

AK

Alexey Kopytov in ru_mysql
источник

ls

løst søul in ru_mysql
это я все видел и тестировал... но почему-то не взлетело...
источник

AK

Alexey Kopytov in ru_mysql
тогда надо обсуждать то, что не взлетело :)
источник

ls

løst søul in ru_mysql
Значит что делал: у меня есть сервер на позициях бинлога (условно мастер), и N слейвов, которые я хочу перевести на gtid с автопозицией.
При переводе (как раз по мануалу) я поднимаю на мастере gtid_mode до ON_PERMISSIVE, на слейвах, делаю gtid_mode = ON, ну и собственно далее было то что ты описал выше, слейв не смог в автопозицию, из-за того что мастер не в gtid_mode = ON.

Далее я пробовал сделать вариант с промежуточным сервером в цепочку: все почти тоже самое:
мастер в gtid_mode = ON_PERMISSIVE, далее от него слейв в gtid_mode = ON, но без автопозиции, а от него уже слейва в gtid_mode = ON с автопозицеий. Но при попытке подцепить первый слейв без автопозиции при старте слейв ругнулся на то, что не может получить события в релей.
источник

SS

Sveta Smirnova in ru_mysql
А как цепляешь слейв без автопозиции? Ему же всё равно включены ли GTID на мастере или нет. Главное указать правильный master_log_file и master_log_pos
источник

SS

Sveta Smirnova in ru_mysql
По поводу первого варианта. Вот это: "On each server, wait until the status variableONGOING_ANONYMOUS_TRANSACTION_COUNT is zero. This can be checked using:

SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';" проверил?
источник

ls

løst søul in ru_mysql
Sveta Smirnova
А как цепляешь слейв без автопозиции? Ему же всё равно включены ли GTID на мастере или нет. Главное указать правильный master_log_file и master_log_pos
Поднимаю gtid_mode, и стартую реплику, т.е. на этот момент сервера уже в реплике, журнал и позиция соответственно тоже есть.
источник

ls

løst søul in ru_mysql
Sveta Smirnova
По поводу первого варианта. Вот это: "On each server, wait until the status variableONGOING_ANONYMOUS_TRANSACTION_COUNT is zero. This can be checked using:

SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';" проверил?
Да, проверял.
источник

ls

løst søul in ru_mysql
Sveta Smirnova
А как цепляешь слейв без автопозиции? Ему же всё равно включены ли GTID на мастере или нет. Главное указать правильный master_log_file и master_log_pos
при старте реплике io_thread не стартанул с ошибкой
Error code 1595 Relay log write failure: could not queue event from master
источник

AK

Alexey Kopytov in ru_mysql
løst søul
при старте реплике io_thread не стартанул с ошибкой
Error code 1595 Relay log write failure: could not queue event from master
думаю, что дело не в анонимных транзакциях. если бы проблема была в них, то ошибка была бы "Cannot replicate anonymous transaction when AUTO_POSITION = 1". А в error log что-нибудь есть? и как версия?
источник

ls

løst søul in ru_mysql
5.7.20-19-log, 5.7.21-20-log
по логам точно сказать сейчас не смогу...
источник

AK

Alexey Kopytov in ru_mysql
судя по коду, перед той ошибкой всегда должны быть ещё одна, которая объясняет, что именно не срослось
источник

ls

løst søul in ru_mysql
а она в выхлопе show slave status ловится, или в error_log смотреть?
источник

AK

Alexey Kopytov in ru_mysql
в error log
источник

ls

løst søul in ru_mysql
удивительно, но пусто
источник

SS

Sveta Smirnova in ru_mysql
løst søul
удивительно, но пусто
Быть такого не может. Вангую позицию указываешь не промежуточного мастера, а оригинального
источник

ls

løst søul in ru_mysql
Сервера в репликации, у них уже установлен и журнал, и позиция! Я просто перевожу их на gtid, и никаких манипуляций с change master не производится.
источник

SS

Sveta Smirnova in ru_mysql
Ну вот ты писал:

> Значит что делал: у меня есть сервер на позициях бинлога (условно мастер), и N слейвов, которые я хочу перевести на gtid с автопозицией.

> Далее я пробовал сделать вариант с промежуточным сервером в цепочку: все почти тоже самое:
мастер в gtid_mode = ON_PERMISSIVE, далее от него слейв в gtid_mode = ON, но без автопозиции

Ошибка приведённая в каком случае?
источник

ls

løst søul in ru_mysql
Эта ошибка проявляется во втором случае
источник