16.4.1.37 Репликация и переменные
Системные переменные не реплицируются корректно при использовании режима STATEMENT, за исключением следующих переменных при использовании области видимости сеанса:
При использовании режима MIXED, указанные выше переменные, используемые в области видимости сеанса, приводят к переключению с журналов на основе операторов на журналы на основе строк. См. Раздел 5.4.4.3, «Смешанный формат логирования бинарных данных».
sql_mode также реплицируется, за исключением режима NO_DIR_IN_CREATE; реплика всегда сохраняет собственное значение для NO_DIR_IN_CREATE, независимо от изменений на источнике. Это верно для всех форматов репликации.
Однако, при mysqlbinlog анализирует оператор SET @@sql_mode =
, полное значение modemode, включая NO_DIR_IN_CREATE, передаётся принимающему серверу. По этой причине репликация такого оператора может быть небезопасна при использовании режима STATEMENT.
Системная переменная default_storage_engine не реплицируется, независимо от режима логирования; это сделано для облегчения репликации между разными движками хранения.
Системная переменная read_only не реплицируется. Кроме того, включение этой переменной имеет разные эффекты относительно временных таблиц, блокировки таблиц и оператора SET PASSWORD в разных версиях MySQL.
Системная переменная max_heap_table_size не реплицируется. Увеличение значения этой переменной на источнике без соответствующего изменения на реплике может привести к ошибкам Таблица заполнена на реплике при попытке выполнения операторов INSERT для таблицы MEMORY на источнике, которая, таким образом, может стать больше, чем её аналог на реплике. Для получения дополнительной информации см. Раздел 16.4.1.20, «Репликация и таблицы MEMORY».
В репликации на основе операторов переменные сеанса не реплицируются должным образом при использовании в операторах, обновляющих таблицы. Например, следующая последовательность операторов не вставит одинаковые данные на источнике и реплике:
SET max_join_size=1000;
INSERT INTO mytable VALUES(@@max_join_size);
Это не относится к общеупотребительной последовательности:
SET time_zone=...;
INSERT INTO mytable VALUES(CONVERT_TZ(..., ..., @@time_zone));
Репликация переменных сеанса не является проблемой при использовании репликации на основе строк, в этом случае переменные сеанса всегда реплицируются безопасно. См. Раздел 16.2.1, «Форматы репликации».
Следующие переменные сеанса записываются в бинарный журнал и учитываются репликой при обработке бинарного журнала, независимо от формата логирования:
Несмотря на то, что переменные сеанса, относящиеся к наборам символов и правилам сортировки, записываются в бинарный журнал, репликация между различными наборами символов не поддерживается.
Для снижения возможной путаницы рекомендуется использовать одинаковые настройки системной переменной lower_case_table_names как на источнике, так и на реплике, особенно при использовании MySQL на платформах с регистрозависимыми файловыми системами.
© 2025 Oracle
Licensed under the GPLv2 License.