16.1.4.3 Отключение транзакций GTID в онлайн-режиме
В данном разделе описывается, как отключить транзакции GTID на серверах, которые уже работают в онлайн-режиме. Эта процедура не требует отключения серверов и подходит для использования в рабочей среде. Однако, если у вас есть возможность отключить серверы при отключении режима GTID, этот процесс будет проще.
Процесс аналогичен включению транзакций GTID при работе сервера в онлайн-режиме, но выполняется в обратном порядке. Единственное различие заключается в том, когда ожидаются для репликации залогированные транзакции.
Перед началом убедитесь, что серверы соответствуют следующим предварительным условиям:
Все серверы в вашей топологии должны использовать MySQL 5.7.6 или более позднюю версию. Вы не можете отключить транзакции GTID онлайн на любом одном сервере, если все серверы в топологии не используют эту версию.
На всех серверах значение
gtid_modeустановлено в значениеON.
-
Выполните следующие команды на каждом реплике, а если используется многоканальная репликация, выполните их для каждого канала и включите в команду условие для канала
FOR CHANNEL:STOP SLAVE [FOR CHANNEL 'channel']; CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE = file, \ MASTER_LOG_POS = position [FOR CHANNEL 'channel']; START SLAVE [FOR CHANNEL 'channel'];
-
На каждом сервере выполните:
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
-
На каждом сервере выполните:
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
-
На каждом сервере подождите, пока переменная @@GLOBAL.GTID_OWNED не станет равна пустой строке. Это можно проверить, используя:
SELECT @@GLOBAL.GTID_OWNED;
На реплике теоретически возможно, что эта переменная сначала пустая, а затем снова не пустая. Это не проблема; достаточно, чтобы она была пустой хотя бы один раз.
Подождите, пока все транзакции, которые в настоящее время существуют в любом двоичном журнале, не будут реплицированы на все реплики. См. Раздел 16.1.4.4, «Проверка репликации анонимных транзакций» для одного из способов проверки того, что все анонимные транзакции были реплицированы на все серверы.
-
Если вы используете двоичные журналы для чего-либо помимо репликации, например, для создания резервных копий или восстановления: подождите, пока вам больше не понадобятся старые двоичные журналы с транзакциями GTID.
Например, после завершения шага 5 вы можете выполнить
FLUSH LOGSна сервере, на котором вы создаёте резервную копию. Затем либо создайте резервную копию явно, либо подождите следующей итерации любой периодической процедуры резервного копирования, которую вы могли настроить.В идеале подождите, пока сервер не очистит все двоичные журналы, существовавшие на момент завершения шага 5. Также подождите, пока не истекут сроки действия всех резервных копий, созданных до шага 5.
ВажноЭто важный момент в этой процедуре. Важно понимать, что журналы, содержащие транзакции GTID, нельзя использовать после следующего шага. Прежде чем продолжить, вы должны убедиться, что транзакции GTID не существуют нигде в топологии.
-
На каждом сервере выполните:
SET @@GLOBAL.GTID_MODE = OFF;
-
На каждом сервере установите
gtid_mode=OFFвmy.cnf.Если вы хотите установить
enforce_gtid_consistency=OFF, вы можете сделать это сейчас. После установки вы должны добавитьenforce_gtid_consistency=OFFв ваш конфигурационный файл.
Если вы хотите перейти к более ранней версии MySQL, вы можете сделать это сейчас, используя стандартную процедуру перехода к более ранней версии.
© 2025 Oracle
Licensed under the GPLv2 License.