Нишант Неупан. Как преобразовать обычную репликацию в репликацию 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.

Дополнительные материалы