Spec-Zone .ru
спецификации, руководства, описания, API

16.1.3.4. Ограничения на Репликацию с GTIDs

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

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

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

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

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

Временные таблицы. CREATE TEMPORARY TABLE и DROP TEMPORARY TABLE операторы не поддерживаются в транзакциях при использовании GTIDs (то есть, когда сервер был запущен с --enforce-gtid-consistency опция). Возможно использовать использование эти операторы с включенным GTIDs, но только за пределами любой транзакции, и только с autocommit=1.

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

Для получения информации о других необходимых опциях запуска, включая GTIDs, см. Раздел 16.1.3.2, "Устанавливая Репликацию Используя GTIDs".

sql_slave_skip_counter не поддерживается при использовании GTIDs. Если Вы должны пропустить транзакции, используйте значение ведущего устройства gtid_executed переменная вместо этого; см. Вводящие пустые транзакции для получения дополнительной информации.

Режим GTID и mysqldump. В MySQL 5.6.9 и позже, возможно импортировать сделанное использование дампа mysqldump в MySQL Server, работающий с включенным режимом GTID, при условии, что нет никаких GTIDs в двоичном журнале целевого сервера.

До MySQL 5.6.9 mysqldump не записывал глобальные ID транзакции, и было необходимо использовать двоичный журнал и mysqlbinlog, чтобы восстановить GTIDs. (Ошибка #14797808, Ошибка #14832472)

Режим GTID и mysql_upgrade. До MySQL 5.6.7 mysql_upgrade не мог соединиться с MySQL Server, который работал с --gtid-mode=ON если mysql_upgrade не был выполнен с --write-binlog=OFF. (Иначе, mysqld должен был быть перезапущен с --gtid-mode=OFF прежде, чем выполнить mysql_upgrade, затем перезапущенный с --gtid_mode=ON впоследствии.) Это не проблема в MySQL 5.6.7 и позже, куда mysql_upgrade работает с --write-binlog=OFF по умолчанию. (Ошибка #13833710) Однако, не рекомендуется сделать так, так как mysql_upgrade может произвести изменения в системных таблицах, которые используют MyISAM механизм хранения, который является нетранзакционным.