Spec-Zone.ru › MySQL 8.4

20.4.1 Идентификаторы транзакций GTID и репликация группы

Репликация группы использует идентификаторы транзакций GTID (global transaction identifiers) для отслеживания точных транзакций, которые были завершены на каждом сервере. Параметры gtid_mode=ON и enforce_gtid_consistency=ON необходимы для всех участников группы. Входящим транзакциям от клиентов присваивается идентификатор GTID членом группы, который их получает. Любые реплицированные транзакции, которые получают члены группы по асинхронным каналам репликации от серверов-источников вне группы, сохраняют идентификаторы GTID, которые у них были при поступлении в член группы.

Идентификаторы GTID, которые присваиваются входящим транзакциям от клиентов, используют имя группы, указанное переменной системы group_replication_group_name, как часть UUID идентификатора, а не UUID отдельного члена группы, который получил транзакцию. Все транзакции, полученные непосредственно группой, могут быть идентифицированы и сгруппированы вместе в наборы GTID, и неважно, какой член их первоначально получил. Каждый член группы имеет зарезервированный блок последовательных GTID для своего использования, и при его исчерпании резервируется больше. Переменная системы group_replication_gtid_assignment_block_size устанавливает размер блоков, по умолчанию 1 миллион GTID в каждом блоке.

События изменения состояния (View_change_log_event), которые генерируются самой группой при присоединении нового члена, получают идентификаторы GTID при записи в бинарный журнал. По умолчанию идентификаторы GTID для этих событий также используют имя группы, указанное переменной системы group_replication_group_name, как часть UUID идентификатора. Вы можете установить переменную системы репликации группы group_replication_view_change_uuid, чтобы использовать другой UUID в идентификаторах GTID для событий изменения состояния, чтобы их легко было отличить от транзакций, полученных группой от клиентов. Это может быть полезно, если ваша настройка позволяет выполнять переключение между группами, и вам нужно идентифицировать и отбросить транзакции, которые были специфичны для резервной группы. Альтернативный UUID должен отличаться от UUID серверов-членов. Он также должен отличаться от любых UUID в идентификаторах GTID, применяемых к анонимным транзакциям, используя опцию ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS оператора CHANGE REPLICATION SOURCE TO.

GTID_ONLY=1, REQUIRE_ROW_FORMAT = 1 и SOURCE_AUTO_POSITION = 1 применяются для каналов репликации группы group_replication_applier и group_replication_recovery. Эти настройки устанавливаются автоматически на каналах репликации группы при их создании или при обновлении сервера-участника в группе репликации. Обычно эти параметры устанавливаются с помощью оператора CHANGE REPLICATION SOURCE TO, но обратите внимание, что их нельзя отключить для канала репликации группы. С этими параметрами член группы не сохраняет имена файлов и позиции файлов в репозиториях метаданных репликации для этих каналов. Автоматическое позиционирование GTID и автоматическое пропускание GTID используются для определения правильных позиций получателя и применяющего при необходимости.

Дополнительные транзакции

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

Дополнительные транзакции могут присутствовать у члена, если административная транзакция выполняется на экземпляре во время остановки репликации группы. Чтобы избежать введения новых транзакций таким способом, всегда установите значение переменной системы sql_log_bin на OFF перед выполнением административных операторов и обратно на ON после:

SET SQL_LOG_BIN=0;
<administrator action>
SET SQL_LOG_BIN=1;

Установка этой переменной системы на OFF означает, что транзакции, которые произойдут с этого момента до того, как вы вернёте её на значение ON, не будут записаны в бинарный журнал и не будут иметь присвоенных идентификаторов GTID.

Если на присоединяющемся члене присутствует дополнительная транзакция, проверьте бинарный журнал для затронутого сервера, чтобы увидеть, что фактически содержит дополнительная транзакция. Самый безопасный метод согласования данных и набора GTID присоединяющегося члена с членами, которые в настоящее время входят в группу, — использование функциональности клонирования MySQL для переноса содержимого с сервера в группе на затронутый сервер. Инструкции по выполнению этого действия см. в разделе 7.6.7.3 «Клонирование удаленных данных». Если транзакция необходима, повторно выполните её после успешного повторного присоединения члена.

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

Spec-Zone.ru

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