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). назначает GTID, включающий указанный UUID, такой как настройка uuidserver_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.