Spec-Zone.ru › MySQL 8.4

19.1.4.2 Включение транзакций GTID онлайн

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

Вы можете настроить каналы репликации для назначения GTID реплицируемым транзакциям, которые еще не имеют их. Эта функция позволяет осуществлять репликацию с сервера-источника, не использующего репликацию на основе GTID, на реплику, которая это делает. Если есть возможность включить GTID на сервере-источнике репликации, как описано в этой процедуре, воспользуйтесь этим способом. Назначение GTID предназначено для серверов-источников репликации, где включение GTID невозможно. Для получения дополнительной информации об этом варианте см. Раздел 19.1.3.6, «Репликация с источника без GTID на реплику с GTID».

Перед началом убедитесь, что gtid_mode установлено OFF на всех серверах.

Данная процедура может быть приостановлена в любое время и продолжена позже с того места, на котором она была прервана, или отменена переходом к соответствующему шагу Раздела 19.1.4.3, «Отключение транзакций GTID онлайн», онлайн-процедуры отключения GTID. Это делает процедуру устойчивой к сбоям, поскольку любые не связанные с ней проблемы, которые могут возникнуть в середине процедуры, можно обрабатывать как обычно, а затем продолжить с того места, где она была прервана.

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

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

    SET @@GLOBAL.enforce_gtid_consistency = WARN;
    

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

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

    SET @@GLOBAL.enforce_gtid_consistency = ON;
    
  3. На каждом сервере выполните следующую команду:

    SET @@GLOBAL.gtid_mode = OFF_PERMISSIVE;
    

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

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

    SET @@GLOBAL.gtid_mode = ON_PERMISSIVE;
    

    Как и в предыдущем шаге, порядок выполнения серверами команды не имеет значения, если каждый сервер выполнил её до перехода к следующему шагу.

  5. На каждом сервере подождите, пока Ongoing_anonymous_transaction_count не станет равным 0. Вы можете проверить его значение, используя команду SHOW STATUS, например так:

    mysql> SHOW STATUS LIKE 'Ongoing%';
    +-------------------------------------+-------+
    | Variable_name                       | Value |
    +-------------------------------------+-------+
    | Ongoing_anonymous_transaction_count | 0     |
    +-------------------------------------+-------+
    1 row in set (0.00 sec)
    

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

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

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

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

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

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

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

  8. На каждом сервере выполните эту команду:

    SET @@GLOBAL.GTID_MODE = ON;
    
  9. На каждом сервере добавьте gtid-mode=ON и enforce-gtid-consistency=ON в my.cnf. Это гарантирует, что для всех транзакций, которые еще не были обработаны, будут использоваться GTID. Для начала использования протокола GTID, чтобы можно было в дальнейшем выполнить автоматический failover, выполните следующие команды на каждой реплике. Если вы используете репликацию с нескольких источников, сделайте это для каждого канала, включая FOR CHANNEL channel клаузу:

    STOP REPLICA [FOR CHANNEL 'channel'];
    
    CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION = 1 [FOR CHANNEL 'channel'];
    
    START REPLICA [FOR CHANNEL 'channel'];
    

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

Spec-Zone.ru

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