Spec-Zone.ru › MySQL 8.4

19.1.3.7 Ограничения репликации с помощью GTID

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

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

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

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

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

Инструкции CREATE TABLE ... SELECT. Для хранилищ, поддерживающих атомарные DDL, CREATE TABLE ... SELECT записывается в двоичный журнал как одна транзакция. Дополнительную информацию см. в разделе 15.1.1 «Поддержка атомарных инструкций определения данных».

Временные таблицы. Если binlog_format установлено в значение STATEMENT, инструкции CREATE TEMPORARY TABLE и DROP TEMPORARY TABLE не могут использоваться внутри транзакций, процедур, функций и триггеров, когда GTID используется на сервере (то есть, когда переменная системы enforce_gtid_consistency установлена в значение ON). Их можно использовать вне этих контекстов, когда GTID используется, при условии, что autocommit=1 установлено. Когда binlog_format установлено в значение ROW или MIXED, инструкции CREATE TEMPORARY TABLE и DROP TEMPORARY TABLE разрешены внутри транзакции, процедуры, функции или триггера, когда GTID используется. Эти инструкции не записываются в двоичный журнал и, следовательно, не реплицируются на реплики. Использование репликации на основе строк означает, что реплики остаются синхронизированными без необходимости репликации временных таблиц. Если удаление этих инструкций из транзакции приводит к пустой транзакции, транзакция не записывается в двоичный журнал.

Предотвращение выполнения неподдерживаемых инструкций. Чтобы предотвратить выполнение инструкций, которые могут привести к сбоям репликации на основе GTID, все серверы должны быть запущены с опцией --enforce-gtid-consistency при включении GTID. Это приводит к тому, что инструкции любого из типов, обсуждавшихся ранее в этом разделе, завершаются с ошибкой.

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

Дополнительную информацию об остальных необходимых параметрах запуска при включении GTID см. в разделе 19.1.3.4 «Настройка репликации с использованием GTID».

Пропуск транзакций. sql_replica_skip_counter недоступен при использовании репликации на основе GTID. Если вам нужно пропустить транзакции, используйте значение переменной gtid_executed источника. Если вы включили назначение GTID на канале репликации, используя опцию ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS инструкции CHANGE REPLICATION SOURCE TO, sql_replica_skip_counter доступно. Дополнительную информацию см. в разделе 19.1.7.3 «Пропуск транзакций».

Игнорирование серверов. IGNORE_SERVER_IDS нельзя использовать с CHANGE REPLICATION SOURCE TO при использовании GTID, поскольку транзакции, которые уже были применены, автоматически игнорируются. Перед запуском репликации на основе GTID проверьте и очистите все списки игнорируемых идентификаторов серверов, которые были установлены ранее на участвующих серверах. Инструкция SHOW REPLICA STATUS, которую можно выполнить для отдельных каналов, отображает список игнорируемых идентификаторов серверов, если он есть. Если список отсутствует, поле Replicate_Ignore_Server_Ids пустое. Если список игнорируемых идентификаторов серверов не пуст, вы можете очистить его с помощью CHANGE REPLICATION SOURCE TO ... IGNORE_SERVER_IDS=() (то есть, с помощью пустого списка идентификаторов серверов, которые нужно игнорировать).

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

Spec-Zone.ru

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