19.1.3.6 Репликация из источника без GTID на реплику с GTID
Вы можете настроить каналы репликации для присвоения GTID реплицируемым транзакциям, которые ещё не имеют его. Эта функция позволяет осуществлять репликацию из источника сервера, на котором не включены GTID и не используется репликация на основе GTID, на реплику, на которой включены GTID. Если возможно включить GTID на реплицируемом сервере источника, как описано в разделе 19.1.4 «Изменение режима GTID на онлайн-серверах», используйте этот подход вместо этого. Эта функция предназначена для серверов источника репликации, на которых невозможно включить GTID. Обратите внимание, что, как и в стандартной репликации MySQL, эта функция не поддерживает репликацию из серверов MySQL-источника, более ранних, чем предыдущая версия, поэтому MySQL 9.1 является самым ранним поддерживаемым источником для реплики MySQL 9.2.
Вы можете включить присвоение 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, выполнять failover с одной реплики на другую и использовать резервные копии для создания дополнительных реплик, как и в любой топологии репликации на основе 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используются для позиционирования потока ввода/вывода репликации (приёмник), а не параметр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.