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.