Spec-Zone.ru › MySQL 8.4

19.1.3.6 Репликация из источника без GTID в реплику с GTID

Вы можете настроить каналы репликации для назначения GTID реплицированным транзакциям, которые ещё не имеют его. Эта функция позволяет выполнять репликацию из сервера-источника, на котором не включены GTID и не используется репликация на основе GTID, в реплику, на которой включены GTID. Если возможно включить GTID на сервере-источнике репликации, как описано в разделе 19.1.4 «Изменение режима GTID на онлайн-серверах», используйте этот подход. Эта функция предназначена для серверов-источников репликации, на которых нельзя включить GTID. Обратите внимание, что, как обычно для репликации MySQL, эта функция не поддерживает репликацию с серверов-источников MySQL, более ранних, чем предыдущая серия релизов, поэтому MySQL 8.3 — это самый ранний поддерживаемый источник для реплики MySQL 8.4.

Вы можете включить назначение GTID в канале репликации, используя опцию ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS оператора CHANGE REPLICATION SOURCE TO. LOCAL назначает GTID, включающий собственный UUID реплики (настройка server_uuid). uuid назначает GTID, включающий указанный UUID, такой как настройка server_uuid для сервера-источника репликации. Использование нелокального UUID позволяет различать транзакции, которые произошли на реплике и транзакции, которые произошли на источнике, и для реплики с несколькими источниками — транзакции, произошедшие на разных источниках. Если какие-либо транзакции, отправленные источником, уже имеют GTID, этот GTID сохраняется.

Важно

Реплика, настроенная с ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS в любом канале, не может быть повышена до статуса замены сервера-источника репликации в случае необходимости failover, и резервная копия, взятая с реплики, не может быть использована для восстановления сервера-источника репликации. Такое же ограничение применяется к замене или восстановлению других реплик, которые используют ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS в любом канале.

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

Для реплики с несколькими источниками вы можете иметь смесь каналов, которые используют ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, и каналов, которые не используют. Каналы, специфичные для Group Replication, не могут использовать ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, но асинхронный канал репликации для другого источника на экземпляре сервера, являющегося членом группы Group Replication, может это делать. Для канала на члене группы Group Replication не указывайте имя группы Group Replication в качестве UUID для создания GTID.

Использование ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS в канале репликации не то же самое, что введение репликации на основе GTID для канала. Множество GTID (gtid_executed) реплики, настроенной с ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, не должно передаваться на другой сервер или сравниваться с набором gtid_executed другого сервера. GTID, назначенные анонимным транзакциям, и выбранный вами UUID имеют значение только для использования этой реплики. Исключением является любая последующая реплика реплики, где вы включили ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, и любые серверы, созданные из резервной копии этой реплики.

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

Канал репликации, использующий ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, имеет следующие отличия от репликации на основе GTID:

  • GTID назначаются реплицированным транзакциям при их применении (если у них еще нет GTID). Обычно GTID назначается на сервере-источнике репликации при подтверждении транзакции и отправляется в реплику вместе с транзакцией. На многопоточной реплике это означает, что порядок GTID необязательно соответствует порядку транзакций, даже если replica_preserve_commit_order = 1.

  • Опции SOURCE_LOG_FILE и SOURCE_LOG_POS оператора CHANGE REPLICATION SOURCE TO используются для позиционирования потока репликации I/O (приемник), а не опция SOURCE_AUTO_POSITION.

  • Оператор SET GLOBAL sql_replica_skip_counter используется для пропуска транзакций в канале репликации, настроенном с ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, а не способом подтверждения пустых транзакций. Инструкции см. в разделе 19.1.7.3 «Пропуск транзакций».

  • Опции UNTIL SQL_BEFORE_GTIDS и UNTIL_SQL_AFTER_GTIDS оператора START REPLICA не могут использоваться для канала.

  • Функция WAIT_FOR_EXECUTED_GTID_SET() работает на уровне всего сервера и может использоваться для ожидания любых последующих реплик сервера, на которых включено ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS. Для ожидания канала с включенным ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, чтобы он догнал источник, который не использует GTID, используйте функцию SOURCE_POS_WAIT().

Таблица Performance Schema replication_applier_configuration показывает, назначены ли GTID анонимным транзакциям в канале репликации, какой используется UUID, и является ли это UUID сервера реплики (LOCAL) или указанный пользователем UUID (UUID). Информация также записывается в репозитории метаданных аппликатора. Оператор RESET REPLICA ALL сбрасывает настройку ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, но оператор RESET REPLICA этого не делает.

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

Spec-Zone.ru

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