Spec-Zone.ru › MySQL 9.2

19.5.1.40 Репликация и переменные

Системные переменные не реплицируются корректно при использовании режима STATEMENT, за исключением следующих переменных при использовании их в области сессии:

  • auto_increment_increment

  • auto_increment_offset

  • character_set_client

  • character_set_connection

  • character_set_database

  • character_set_server

  • collation_connection

  • collation_database

  • collation_server

  • foreign_key_checks

  • identity

  • last_insert_id

  • lc_time_names

  • pseudo_thread_id

  • sql_auto_is_null

  • time_zone

  • timestamp

  • unique_checks

При использовании режима MIXED переменные из предыдущего списка, при использовании в области сессии, вызывают переключение от логирования на основе инструкций к логированию на основе строк. См. Раздел 7.4.4.3, «Смешанный формат двоичного логирования».

sql_mode также реплицируется, за исключением режима NO_DIR_IN_CREATE; реплика всегда сохраняет собственное значение для NO_DIR_IN_CREATE, независимо от изменений на источнике. Это верно для всех форматов репликации.

Однако, когда mysqlbinlog анализирует инструкцию SET @@sql_mode = mode, полное значение mode, включая NO_DIR_IN_CREATE, передаётся на сервер-получатель. По этой причине репликация такой инструкции может быть небезопасной при использовании режима STATEMENT.

Системная переменная default_storage_engine не реплицируется, независимо от режима логирования; это сделано для облегчения репликации между различными движками хранения данных.

Системная переменная read_only не реплицируется. Кроме того, включение этой переменной имеет разные эффекты в отношении временных таблиц, блокировок таблиц и инструкции SET PASSWORD в разных версиях MySQL.

Системная переменная max_heap_table_size не реплицируется. Увеличение значения этой переменной на источнике без аналогичного увеличения на реплике может привести к ошибкам Таблица заполнена на реплике при попытке выполнения инструкции INSERT на таблице MEMORY на источнике, которая таким образом может стать больше, чем её аналог на реплике. Для получения дополнительной информации, см. Раздел 19.5.1.22, «Репликация и таблицы MEMORY».

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

SET max_join_size=1000;
INSERT INTO mytable VALUES(@@max_join_size);

Это не относится к обычной последовательности:

SET time_zone=...;
INSERT INTO mytable VALUES(CONVERT_TZ(..., ..., @@time_zone));

Репликация переменных сессии не является проблемой при использовании репликации на основе строк, в котором переменные сессии всегда реплицируются безопасно. См. Раздел 19.2.1, «Форматы репликации».

Следующие переменные сессии записываются в двоичный журнал и учитываются репликой при чтении двоичного журнала, независимо от формата логирования:

  • sql_mode

  • foreign_key_checks

  • unique_checks

  • character_set_client

  • collation_connection

  • collation_database

  • collation_server

  • sql_auto_is_null

Важно

Несмотря на то, что переменные сессии, относящиеся к наборам символов и сортировкам, записываются в двоичный журнал, репликация между различными наборами символов не поддерживается.

Чтобы уменьшить возможные недоразумения, рекомендуется использовать одинаковые настройки для системной переменной lower_case_table_names на источнике и реплике, особенно при использовании MySQL на платформах с регистрозависимыми файловыми системами. Настройка lower_case_table_names может быть настроена только при инициализации сервера.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/replication-features-variables.html

Spec-Zone.ru

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