Spec-Zone .ru
спецификации, руководства, описания, API
|
Поскольку GTID-на-основе репликация зависит от транзакций, некоторые функции, иначе доступные в MySQL, не поддерживаются при использовании ее. Этот раздел предоставляет информацию об ограничениях на и ограничениях репликации с GTIDs.
Обновления, включающие нетранзакционные механизмы хранения. При использовании GTIDs, обновлений к
таблицам, используя нетранзакционные механизмы хранения такой как MyISAM
не может сделанный в том же самом операторе или транзакции как
обновления к таблицам, используя транзакционные механизмы хранения такой как InnoDB
.
Это ограничение - то, вследствие того, что обновления к использованию нетранзакционного механизма хранения, смешанного с обновлениями к таблицам, которые используют транзакционный механизм хранения в пределах той же самой транзакции, могут привести к многократному GTIDs, присваиваемому той же самой транзакции. Эта проблема может также произойти по крайней мере в двух других случаях, перечисленных здесь:
Когда ведущее устройство и ведомое использование различные механизмы хранения для их соответствующих версий той же самой таблицы, где один механизм хранения является транзакционным и другой, не.
Когда и ведущее устройство и ведомое устройство используют нетранзакционный
механизм, но используют различные двоичные форматы журналирования (например, когда ведущее устройство
имеет binlog_format=ROW
и ведомое устройство имеет binlog_format=STATEMENT
).
В любом из случаев, только упомянутых, взаимно-однозначное соответствие между транзакциями и 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
механизм хранения, который является нетранзакционным.