16.1.3.6 Ограничения репликации с использованием GTID
Поскольку репликация, основанная на GTID, зависит от транзакций, некоторые функции MySQL, доступные в других случаях, не поддерживаются при её использовании. В этом разделе содержится информация об ограничениях и ограничениях репликации с использованием GTID.
Обновления, затрагивающие нетранзакционные движки хранения. При использовании GTID обновления таблиц с использованием нетранзакционных движков хранения, таких как MyISAM, не могут быть выполнены в одной команде или транзакции с обновлениями таблиц с использованием транзакционных движков хранения, таких как InnoDB.
Это ограничение связано с тем, что обновления таблиц, использующих нетранзакционный движок хранения, смешанные с обновлениями таблиц, использующих транзакционный движок хранения в рамках одной транзакции, могут привести к назначению нескольких GTID одной транзакции.
Такие проблемы также могут возникать, когда источник и реплика используют разные движки хранения для своих соответствующих версий одной и той же таблицы, где один движок хранения является транзакционным, а другой — нет. Также следует учитывать, что триггеры, определенные для работы с нетранзакционными таблицами, могут быть причиной этих проблем.
В любом из упомянутых случаев однозначное соответствие между транзакциями и GTID нарушается, в результате чего репликация, основанная на GTID, не может работать правильно.
Команды CREATE TABLE ... SELECT. Команды CREATE
TABLE ... SELECT не разрешены при использовании репликации на основе GTID. Когда binlog_format установлено в значение STATEMENT, команда CREATE TABLE ... SELECT записывается в двоичный журнал как одна транзакция с одним GTID, но если используется формат ROW, команда записывается как две транзакции с двумя GTID. Если источник использовал формат STATEMENT, а реплика — формат ROW, реплика не смогла бы обработать транзакцию правильно, поэтому команда CREATE TABLE ... SELECT запрещена с использованием GTID для предотвращения этой ситуации.
Временные таблицы. Команды CREATE TEMPORARY
TABLE и DROP TEMPORARY
TABLE не поддерживаются внутри транзакций, процедур, функций и триггеров при использовании GTID (то есть, когда системная переменная enforce_gtid_consistency установлена в значение ON). Эти команды можно использовать при включённых GTID, но только вне любой транзакции и только с autocommit=1.
Предотвращение выполнения неподдерживаемых команд. Для предотвращения выполнения команд, которые могут привести к сбою репликации на основе GTID, все серверы должны быть запущены с опцией --enforce-gtid-consistency при включении GTID. Это приводит к тому, что команды любого из типов, обсуждаемых ранее в этом разделе, завершаются ошибкой.
Обратите внимание, что --enforce-gtid-consistency вступает в силу только в том случае, если для команды происходит двоичное протоколирование. Если двоичное протоколирование отключено на сервере или команды не записываются в двоичный журнал, потому что они удалены фильтром, проверка или применение согласованности GTID для нелогированных команд не выполняется.
Дополнительную информацию о других необходимых опциях запуска при включении GTID см. в разделе 16.1.3.4 «Настройка репликации с использованием GTID».
Пропуск транзакций. sql_slave_skip_counter не поддерживается при использовании GTID. Если вам нужно пропустить транзакции, используйте значение переменной gtid_executed источника. Инструкции см. в разделе 16.1.7.3 «Пропуск транзакций».
Игнорирование серверов. Опция IGNORE_SERVER_IDS команды CHANGE
MASTER TO устарела при использовании GTID, так как транзакции, которые уже были применены, автоматически игнорируются. Перед началом репликации на основе GTID проверьте и очистите все списки игнорируемых идентификаторов серверов, которые были ранее установлены на вовлечённых серверах. Команда SHOW SLAVE STATUS, которая может быть выполнена для отдельных каналов, отображает список игнорируемых идентификаторов серверов, если он есть. Если список отсутствует, поле Replicate_Ignore_Server_Ids пустое.
Режим GTID и mysqldump. Возможно импортировать дамп, созданный с помощью mysqldump, на сервер MySQL, работающий в режиме GTID, при условии, что в двоичном журнале целевого сервера нет GTID.
Режим GTID и mysql_upgrade. Когда сервер работает с глобальными идентификаторами транзакций (GTID) (gtid_mode=ON), не включайте двоичное протоколирование с помощью mysql_upgrade (опция --write-binlog).
© 2025 Oracle
Licensed under the GPLv2 License.