Spec-Zone.ru › MySQL 8.4

19.1.4.3 Отключение транзакций GTID онлайн

В этом разделе описывается, как отключить транзакции GTID на серверах, которые уже запущены. Данная процедура не требует остановки сервера и подходит для использования в производственной среде. Однако, если есть возможность остановить серверы при отключении режима GTIDs, этот процесс будет проще.

Процесс аналогичен включению транзакций GTID при запущенном сервере, но с обратными шагами. Единственное отличие — момент ожидания репликации залогированных транзакций.

Перед началом все серверы должны соответствовать следующим условиям:

  • На всех серверах значение gtid_mode установлено в ON.

  • Опция --replicate-same-server-id не установлена ни на одном сервере. Нельзя отключить транзакции GTID, если эта опция установлена вместе с опцией --log-replica-updates (по умолчанию) и включено двоичное протоколирование (также по умолчанию). Без GTIDs такое сочетание опций приводит к бесконечным циклам в круговой репликации.

  1. Выполните следующие операторы на каждом реплике, а если используется многоисточниковая репликация, выполните для каждого канала, включая условие FOR CHANNEL при использовании многоисточниковой репликации:

    STOP REPLICA [FOR CHANNEL 'channel'];
    
    CHANGE REPLICATION SOURCE TO
      SOURCE_AUTO_POSITION = 0,
      SOURCE_LOG_FILE = 'file',
      SOURCE_LOG_POS = position
      [FOR CHANNEL 'channel'];
    
    START REPLICA [FOR CHANNEL 'channel'];
     

    Значения для file и position можно получить из столбцов relay_source_log_file и exec_source_log_position в выводе SHOW REPLICA STATUS. Имена file и channel — строки; обе эти строки должны быть заключены в кавычки при использовании в операторах STOP REPLICA, CHANGE REPLICATION SOURCE TO и START REPLICA.

  2. На каждом сервере выполните следующий оператор:

    SET @@global.gtid_mode = ON_PERMISSIVE;
    
  3. На каждом сервере выполните следующий оператор:

    SET @@global.gtid_mode = OFF_PERMISSIVE;
    
  4. На каждом сервере дождитесь, пока глобальное значение gtid_owned станет равным пустой строке. Это можно проверить, используя показанный здесь оператор:

    SELECT @@global.gtid_owned;
    

    На реплике теоретически возможно, что это пусто, а затем станет непустым. Это не проблема; достаточно, чтобы значение было пустым хотя бы один раз.

  5. Дождитесь, пока все транзакции, которые в настоящее время существуют в любом двоичном журнале, будут подтверждены на всех репликах. См. Раздел 19.1.4.4, «Проверка репликации анонимных транзакций» для одного из методов проверки того, что все анонимные транзакции были реплицированы на все серверы.

  6. Если вы используете двоичные журналы для чего-либо помимо репликации (например, для выполнения резервного копирования или восстановления в определенный момент времени), подождите, пока вам больше не понадобятся старые двоичные журналы, содержащие транзакции GTID.

    Например, после завершения предыдущего шага можно выполнить FLUSH LOGS на сервере, где вы выполняете резервное копирование. Затем выполните резервное копирование вручную или дождитесь следующей итерации любой периодической процедуры резервного копирования, которую вы могли настроить.

    В идеале, вы должны дождаться, пока сервер очистит все двоичные журналы, существовавшие на момент выполнения шага 5, и любые резервные копии, созданные до этого, истекли.

    Следует помнить, что журналы, содержащие транзакции GTID, больше нельзя использовать после следующего шага. Поэтому, прежде чем продолжить, необходимо убедиться, что нигде в топологии не существует непроверенных транзакций GTID.

  7. На каждом сервере выполните следующий оператор:

    SET @@global.gtid_mode = OFF;
    
  8. На каждом сервере установите gtid_mode=OFF в my.cnf.

    По желанию, можно также установить enforce_gtid_consistency=OFF. После этого необходимо добавить enforce_gtid_consistency=OFF в ваш конфигурационный файл.

Если вы хотите перейти к более ранней версии MySQL, вы можете сделать это сейчас, используя обычную процедуру перехода к более ранней версии.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/replication-mode-change-online-disable-gtids.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API