Нишант Неупан. Как преобразовать обычную репликацию в репликацию GTID в MySQL
Это перевод статьи: Nishant Neupane. How to convert standard replication to GTID replication in MySQL.
План включения GTID в конфигруации ведущий-ведомый без перерыва в работе заключается в том, чтобы разрешить ведомым серверам на некоторое время использовать репликацию как с GTID, так и без GTID, затем включить GTID на ведущем сервере и затем включить GTID на ведомых. Последовательность такова:
На ведущем сервере:
SET global enforce_gtid_consistency = WARN;
Теперь нужно наблюдать в течение некоторого времени за журналом MySQL, появятся ли предупреждения о транзакциях, не поддерживаемых GTID. Если такие предупреждения есть, нужно доработать приложение так, чтобы оно использовало лишь те возможности, которые совместимы с GTID. Если предупреждений нет, следуем дальше.
На каждом из ведомых серверов:
SET GLOBAL enforce_gtid_consistency = ON;
SET GLOBAL gtid_mode = OFF_PERMISSIVE;
SET GLOBAL gtid_mode = ON_PERMISSIVE;
Теперь на ведущем сервере:
SET GLOBAL enforce_gtid_consistency = ON;
SET GLOBAL gtid_mode = OFF_PERMISSIVE;
SET GLOBAL gtid_mode = ON_PERMISSIVE;
Ждём, пока приведённый ниже запрос на ведущем сервере не начнёт возвращать 0:
SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
Продолжаем на ведущем сервере:
SET GLOBAL gtid_mode = ON;
На ведомых серверах:
SET GLOBAL gtid_mode = ON;
Не забудьте добавить эти строки в файл my.cnf
(на ведущих и на ведомых серверах).
[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON
Можно оставить ведомые серверы как есть и они будут прекрасно работать, но также можно включить автоматическое позиционирование по GTID с помощью последовательности следующих команд:
STOP SLAVE;
CHANGE MASTER TO MASTER_AUTO_POSITION = 1;
START SLAVE;
Проделайте эту же последовательность в случае, если на ведомых серверах включена многоканальная репликация. Перед включением GTID (gtid_mode = ON
) на всех ведущих серверах, на ведомых серверах должен быть включен gtid_mode = ON_PERMISSIVE
. После включения на всех ведущих серверах, включите GTID и на ведомых серверах.
Примеры предупреждений
После присвоения переменной enforce_gtid_consistency
значения WARN
при обнаружении несовместимых запросов в журнал работы MySQL будут выводиться предупреждения. Примеры таких предупреждений приведены ниже:
2024-08-23T00:00:01.476078Z 1273769 [Warning] Statement violates GTID consistency: CREATE TABLE ... SELECT.