19.1.6.2 Параметры и переменные источника репликации
В этом разделе описываются параметры сервера и системные переменные, которые можно использовать на серверах-источниках репликации. Вы можете указать параметры либо в командной строке, либо в файле параметров. Значения системных переменных можно задавать с помощью SET.
На сервере-источнике и каждом реплике необходимо установить системную переменную server_id для задания уникального идентификатора репликации. Для каждого сервера следует выбрать уникальное целое положительное число в диапазоне от 1 до 232 − 1, и каждый идентификатор должен отличаться от всех других идентификаторов, используемых любым другим источником или репликой в топологии репликации. Пример: server-id=3.
Параметры, используемые на источнике для управления двоичным логом, см. в разделе 19.1.6.4, «Параметры и переменные двоичного лога».
Параметры запуска серверов-источников репликации
В данном списке описаны параметры запуска для управления серверами-источниками репликации. Переменные системы, связанные с репликацией, рассматриваются позднее в этом разделе.
-
Формат командной строки --show-replica-auth-info[={OFF|ON}]Тип Булево Значение по умолчанию OFFИспользуйте
--show-replica-auth-info, который отображает имена пользователей и пароли репликации в выводеSHOW REPLICASна источнике для реплик, запущенных с параметрами--report-userи--report-password. -
Формат командной строки --show-slave-auth-info[={OFF|ON}]Устаревший Да Тип Булево Значение по умолчанию OFFУстаревшее имя для
--show-replica-auth-info.
Системные переменные, используемые на серверах-источниках репликации
Следующие системные переменные используются для репликации на серверах-источниках или с ними:
-
Формат командной строки --auto-increment-increment=#Системная переменная auto_increment_incrementОбласть действия Глобальная, сеансовая Динамическая Да SET_VARПрименяется ли подсказкаДа Тип Целое число Значение по умолчанию 1Минимальное значение 1Максимальное значение 65535auto_increment_incrementиauto_increment_offsetпредназначены для использования с циклической (от источника к источнику) репликацией и могут использоваться для управления работой столбцовAUTO_INCREMENT. Обе переменные имеют глобальное и сеансовое значения, и каждая может принимать целое значение от 1 до 65535 включительно. Установка значения любой из этих двух переменных в 0 приводит к установке ее значения в 1 вместо этого. Попытка установить значение любой из этих двух переменных на целое число больше 65535 или меньше 0 приведет к установке ее значения в 65535 вместо этого. Попытка установить значениеauto_increment_incrementилиauto_increment_offsetна значение, отличное от целого числа, приведет к ошибке, и фактическое значение переменной останется неизменным.Примечаниеauto_increment_incrementтакже поддерживается для использования с таблицамиNDB.При запуске Group Replication на сервере значение
auto_increment_incrementизменяется на значениеgroup_replication_auto_increment_increment, которое по умолчанию равно 7, а значениеauto_increment_offsetизменяется на идентификатор сервера. Изменения отменяются при остановке Group Replication. Эти изменения производятся и отменяются только в том случае, еслиauto_increment_incrementиauto_increment_offsetимеют значение по умолчанию 1. Если их значения уже изменены от значения по умолчанию, Group Replication не изменяет их. Эти системные переменные также не изменяются, когда Group Replication находится в режиме single-primary, где запись выполняет только один сервер.auto_increment_incrementиauto_increment_offsetвлияют на поведение столбцаAUTO_INCREMENTследующим образом:-
auto_increment_incrementуправляет интервалом между последовательными значениями столбца. Например:mysql>
SHOW VARIABLES LIKE 'auto_inc%';+--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | +--------------------------+-------+ 2 rows in set (0.00 sec) mysql>CREATE TABLE autoinc1->(col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);Query OK, 0 rows affected (0.04 sec) mysql>SET @@auto_increment_increment=10;Query OK, 0 rows affected (0.00 sec) mysql>SHOW VARIABLES LIKE 'auto_inc%';+--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 10 | | auto_increment_offset | 1 | +--------------------------+-------+ 2 rows in set (0.01 sec) mysql>INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql>SELECT col FROM autoinc1;+-----+ | col | +-----+ | 1 | | 11 | | 21 | | 31 | +-----+ 4 rows in set (0.00 sec) -
auto_increment_offsetопределяет начальную точку значения столбцаAUTO_INCREMENT. Рассмотрим следующее, предполагая, что эти инструкции выполняются в той же сессии, что и пример, приведенный в описанииauto_increment_increment:mysql>
SET @@auto_increment_offset=5;Query OK, 0 rows affected (0.00 sec) mysql>SHOW VARIABLES LIKE 'auto_inc%';+--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 10 | | auto_increment_offset | 5 | +--------------------------+-------+ 2 rows in set (0.00 sec) mysql>CREATE TABLE autoinc2->(col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);Query OK, 0 rows affected (0.06 sec) mysql>INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql>SELECT col FROM autoinc2;+-----+ | col | +-----+ | 5 | | 15 | | 25 | | 35 | +-----+ 4 rows in set (0.02 sec)Когда значение
auto_increment_offsetбольше, чем значениеauto_increment_increment, значениеauto_increment_offsetигнорируется.
Если любое из этих переменных изменено, а затем введены новые строки в таблицу, содержащую столбец
AUTO_INCREMENT, результаты могут показаться нелогичными, потому что ряд значенийAUTO_INCREMENTрассчитывается без учета уже существующих значений в столбце, и следующее вставленное значение — наименьшее значение в ряду, которое больше максимального существующего значения в столбцеAUTO_INCREMENT. Ряд рассчитывается так:auto_increment_offset+N×auto_increment_incrementгде
N— положительное целое значение в ряду [1, 2, 3, ...]. Например:mysql>
SHOW VARIABLES LIKE 'auto_inc%';+--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 10 | | auto_increment_offset | 5 | +--------------------------+-------+ 2 rows in set (0.00 sec) mysql>SELECT col FROM autoinc1;+-----+ | col | +-----+ | 1 | | 11 | | 21 | | 31 | +-----+ 4 rows in set (0.00 sec) mysql>INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql>SELECT col FROM autoinc1;+-----+ | col | +-----+ | 1 | | 11 | | 21 | | 31 | | 35 | | 45 | | 55 | | 65 | +-----+ 8 rows in set (0.00 sec)Значения, показанные для
auto_increment_incrementиauto_increment_offset, генерируют ряд 5 +N× 10, то есть [5, 15, 25, 35, 45, ...]. Наибольшее значение, присутствующее в столбцеcolдоINSERT, равно 31, а следующее доступное значение в рядуAUTO_INCREMENTравно 35, поэтому вставленные значения дляcolначинаются с этого момента, и результаты совпадают с результатами запросаSELECT.Влияние этих двух переменных нельзя ограничить одной таблицей; эти переменные управляют поведением всех столбцов
AUTO_INCREMENTво всех таблицах на сервере MySQL. Если установлено глобальное значение любой из этих переменных, его влияние сохраняется до тех пор, пока глобальное значение не будет изменено или переопределено установкой сеансового значения или до перезапуска mysqld. Если локальное значение установлено, новое значение влияет на столбцыAUTO_INCREMENTдля всех таблиц, в которые текущий пользователь вставляет новые строки, в течение сеанса, если значения не изменяются в течение этого сеанса.Значение по умолчанию
auto_increment_incrementравно 1. См. Раздел 19.5.1.1, «Репликация и AUTO_INCREMENT». -
-
Формат командной строки --auto-increment-offset=#Системная переменная auto_increment_offsetОбласть действия Глобальная, сеансовая Динамическая Да SET_VARПрименяется ли подсказкаДа Тип Целое число Значение по умолчанию 1Минимальное значение 1Максимальное значение 65535Эта переменная имеет значение по умолчанию 1. Если она оставлена со значением по умолчанию, а Group Replication запускается на сервере в режиме multi-primary, она изменяется на идентификатор сервера. Дополнительные сведения см. в описании
auto_increment_increment.Примечаниеauto_increment_offsetтакже поддерживается для использования с таблицамиNDB.
-
Системная переменная immediate_server_versionОбласть видимости Сессия Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 999999Минимальное значение 0Максимальное значение 999999Для внутреннего использования репликацией. Эта системная переменная сессии содержит номер выпуска сервера MySQL, который является непосредственным источником в топологии репликации (например,
80404для экземпляра сервера MySQL 8.4.4). Если этот непосредственный сервер имеет выпуск, который не поддерживает системную переменную сессии, значение переменной устанавливается в 0 (UNKNOWN_SERVER_VERSION).Значение переменной реплицируется из источника в реплику. С этой информацией реплика может правильно обрабатывать данные, поступающие из источника более старой версии, распознавая, где произошли изменения синтаксиса или семантики между участвующими выпусками, и обрабатывая их соответствующим образом. Информация также может использоваться в среде групповой репликации, где один или несколько участников группы репликации имеют более новую версию, чем другие. Значение переменной можно просмотреть в двоичном журнале для каждой транзакции (как часть
Gtid_log_eventилиAnonymous_gtid_log_event, если GTID не используются на сервере), и это может быть полезно при отладке проблем репликации между версиями.Установка значения сессии этой системной переменной является ограниченной операцией. Пользователь сессии должен иметь либо привилегию
REPLICATION_APPLIER(см. Раздел 19.3.3, «Проверка привилегий репликации»), либо привилегии, достаточные для установки ограниченных переменных сессии (см. Раздел 7.1.9.1, «Привилегии системных переменных»). Однако обратите внимание, что переменная не предназначена для установки пользователями; она устанавливается автоматически инфраструктурой репликации. -
Системная переменная original_server_versionОбласть видимости Сессия Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 999999Минимальное значение 0Максимальное значение 999999Для внутреннего использования репликацией. Эта системная переменная сессии содержит номер выпуска сервера MySQL, на котором транзакция была первоначально подтверждена (например,
80404для экземпляра сервера MySQL 8.4.4). Если этот исходный сервер имеет выпуск, который не поддерживает системную переменную сессии, значение переменной устанавливается в 0 (UNKNOWN_SERVER_VERSION). Обратите внимание, что когда номер выпуска устанавливается исходным сервером, значение переменной сбрасывается в 0, если непосредственный сервер или любой другой промежуточный сервер в топологии репликации не поддерживает системную переменную сессии и, следовательно, не реплицирует ее значение.Значение переменной устанавливается и используется так же, как и для системной переменной
immediate_server_version. Если значение переменной совпадает со значением системной переменнойimmediate_server_version, в двоичный журнал записывается только последнее, с указанием того, что версия исходного сервера совпадает.В среде групповой репликации события журнала изменений представления, которые представляют собой специальные транзакции, помещаемые в очередь каждым участником группы, когда к группе присоединяется новый участник, помечаются версией сервера участника группы, помещающего транзакцию в очередь. Это гарантирует, что версия сервера исходного донора известна присоединяющемуся участнику. Поскольку события журнала изменений представления, помещенные в очередь для конкретного изменения представления, имеют один и тот же GTID на всех участниках, только в этом случае экземпляры одного и того же GTID могут иметь разные версии исходного сервера.
Установка значения сессии этой системной переменной является ограниченной операцией. Пользователь сессии должен иметь либо привилегию
REPLICATION_APPLIER(см. Раздел 19.3.3, «Проверка привилегий репликации»), либо привилегии, достаточные для установки ограниченных переменных сессии (см. Раздел 7.1.9.1, «Привилегии системных переменных»). Однако обратите внимание, что переменная не предназначена для установки пользователями; она устанавливается автоматически инфраструктурой репликации. -
Формат командной строки --rpl-semi-sync-master-enabled[={OFF|ON}]Системная переменная rpl_semi_sync_master_enabledОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Логическое Значение по умолчанию OFFУстаревший синоним для
rpl_semi_sync_source_enabled. -
Формат командной строки --rpl-semi-sync-master-timeout=#Системная переменная rpl_semi_sync_master_timeoutОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295Единица измерения миллисекунды Устаревший синоним для
rpl_semi_sync_source_timeout. -
rpl_semi_sync_master_trace_levelФормат командной строки --rpl-semi-sync-master-trace-level=#Системная переменная rpl_semi_sync_master_trace_levelОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 32Минимальное значение 0Максимальное значение 4294967295Устаревший синоним для
rpl_semi_sync_source_trace_level. -
rpl_semi_sync_master_wait_for_slave_countФормат командной строки --rpl-semi-sync-master-wait-for-slave-count=#Системная переменная rpl_semi_sync_master_wait_for_slave_countОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 1Минимальное значение 1Максимальное значение 65535Устаревший синоним для
rpl_semi_sync_source_wait_for_replica_count. -
rpl_semi_sync_master_wait_no_slaveФормат командной строки --rpl-semi-sync-master-wait-no-slave[={OFF|ON}]Системная переменная rpl_semi_sync_master_wait_no_slaveОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Логическое Значение по умолчанию ONУстаревший синоним для
rpl_semi_sync_source_wait_no_replica.
-
rpl_semi_sync_master_wait_pointФормат командной строки --rpl-semi-sync-master-wait-point=valueСистемная переменная rpl_semi_sync_master_wait_pointОбласть действия Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Перечисление Значение по умолчанию AFTER_SYNCДопустимые значения AFTER_SYNCAFTER_COMMITУстаревший синоним для
rpl_semi_sync_source_wait_point. -
Формат командной строки --rpl-semi-sync-source-enabled[={OFF|ON}]Системная переменная rpl_semi_sync_source_enabledОбласть действия Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Булево Значение по умолчанию OFFrpl_semi_sync_source_enabledдоступна, когда плагинrpl_semi_sync_source(библиотекаsemisync_source.so) был установлен на реплике для настройки полусинхронной репликации.rpl_semi_sync_source_enabledуправляет тем, включена ли полусинхронная репликация на исходном сервере. Чтобы включить или отключить плагин, установите это значение переменной вONилиOFF(или 1 или 0) соответственно. Значение по умолчанию —OFF. -
Формат командной строки --rpl-semi-sync-source-timeout=#Системная переменная rpl_semi_sync_source_timeoutОбласть действия Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295Единица измерения миллисекунды rpl_semi_sync_source_timeoutдоступна, когда плагинrpl_semi_sync_source(библиотекаsemisync_source.so) установлен на реплике.rpl_semi_sync_source_timeoutуправляет тем, как долго источник ожидает подтверждения фиксации от реплики, прежде чем истечет время ожидания и произойдет возврат к асинхронной репликации. Значение указывается в миллисекундах, а значение по умолчанию равно 10000 (10 секунд). -
rpl_semi_sync_source_trace_levelФормат командной строки --rpl-semi-sync-source-trace-level=#Системная переменная rpl_semi_sync_source_trace_levelОбласть действия Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 32Минимальное значение 0Максимальное значение 4294967295rpl_semi_sync_source_trace_levelдоступна, когда плагинrpl_semi_sync_source(библиотекаsemisync_source.so) установлен на реплике.rpl_semi_sync_source_trace_levelзадает уровень трассировки отладки полусинхронной репликации на исходном сервере. Определены четыре уровня:1 = общий уровень (например, ошибки функций времени)
16 = подробный уровень (более подробная информация)
32 = уровень ожидания сети (более подробная информация о сетевых ожиданиях)
64 = уровень функции (информация о входе и выходе функции)
-
rpl_semi_sync_source_wait_for_replica_countФормат командной строки --rpl-semi-sync-source-wait-for-replica-count=#Системная переменная rpl_semi_sync_source_wait_for_replica_countОбласть действия Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 1Минимальное значение 1Максимальное значение 65535rpl_semi_sync_source_wait_for_replica_countдоступна, когда плагинrpl_semi_sync_source(библиотекаsemisync_source.so) установлен на реплике для настройки полусинхронной репликации.rpl_semi_sync_source_wait_for_replica_countзадает количество подтверждений от реплик, которые источник должен получить для каждой транзакции, прежде чем продолжить. По умолчаниюrpl_semi_sync_source_wait_for_replica_countравно1, что означает, что полусинхронная репликация продолжается после получения одного подтверждения от реплики. Лучшая производительность достигается при малых значениях этой переменной.Например, если
rpl_semi_sync_source_wait_for_replica_countравно2, то 2 реплики должны подтвердить получение транзакции, прежде чем истечет период ожидания, настроенный с помощьюrpl_semi_sync_source_timeout, для продолжения полусинхронной репликации. Если меньше реплик подтвердят получение транзакции в течение периода ожидания, источник вернется к обычной репликации.ПримечаниеЭто поведение также зависит от
rpl_semi_sync_source_wait_no_replica. -
rpl_semi_sync_source_wait_no_replicaФормат командной строки --rpl-semi-sync-source-wait-no-replica[={OFF|ON}]Системная переменная rpl_semi_sync_source_wait_no_replicaОбласть действия Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Булево Значение по умолчанию ONrpl_semi_sync_source_wait_no_replicaдоступна, когда плагинrpl_semi_sync_source(библиотекаsemisync_source.so) установлен на реплике.rpl_semi_sync_source_wait_no_replicaуправляет тем, ожидает ли источник истечения периода ожидания, настроенного с помощьюrpl_semi_sync_source_timeout, даже если количество реплик уменьшится до значения меньше, чем количество реплик, настроенных с помощьюrpl_semi_sync_source_wait_for_replica_count, в течение периода ожидания.Когда значение
rpl_semi_sync_source_wait_no_replicaравноON(по умолчанию), допустимо уменьшение количества реплик до значения меньше, чемrpl_semi_sync_source_wait_for_replica_count, в течение периода ожидания. Пока достаточно реплик подтвердят транзакцию до истечения периода ожидания, полусинхронная репликация будет продолжаться.Когда значение
rpl_semi_sync_source_wait_no_replicaравноOFF, если количество реплик уменьшится до значения меньше, чем количество, настроенное вrpl_semi_sync_source_wait_for_replica_count, в любое время в течение периода ожидания, настроенного с помощьюrpl_semi_sync_source_timeout, источник вернется к обычной репликации.
-
rpl_semi_sync_source_wait_pointФормат командной строки --rpl-semi-sync-source-wait-point=valueСистемная переменная rpl_semi_sync_source_wait_pointОбласть действия Глобальная Динамическая Да SET_VARПрименимо ли ограничениеНет Тип Перечисление Значение по умолчанию AFTER_SYNCДопустимые значения AFTER_SYNCAFTER_COMMITrpl_semi_sync_source_wait_pointдоступна при установке плагинаrpl_semi_sync_source(библиотекаsemisync_source.so) на реплику.rpl_semi_sync_source_wait_pointуправляет моментом, когда сервер источника полусинхронной репликации ожидает подтверждения приема транзакции от реплики, прежде чем вернуть клиенту статус об успешном выполнении транзакции. Разрешены следующие значения:AFTER_SYNC(значение по умолчанию): Источник записывает каждую транзакцию в свой двоичный журнал и на реплику, и синхронизирует двоичный журнал на диск. Источник ожидает подтверждения приема транзакции от реплики после синхронизации. Получив подтверждение, источник подтверждает транзакцию в хранилище данных и возвращает результат клиенту, который может продолжить работу.AFTER_COMMIT: Источник записывает каждую транзакцию в свой двоичный журнал и на реплику, синхронизирует двоичный журнал и подтверждает транзакцию в хранилище данных. Источник ожидает подтверждения приема транзакции от реплики после подтверждения. Получив подтверждение, источник возвращает результат клиенту, который может продолжить работу.
Характеристики репликации этих параметров отличаются следующим образом:
-
При использовании
AFTER_SYNCвсе клиенты видят подтверждённую транзакцию одновременно: после того, как она была подтверждена репликой и подтверждена в хранилище данных на источнике. Таким образом, все клиенты видят одинаковые данные на источнике.В случае сбоя источника все транзакции, подтверждённые на источнике, были реплицированы на реплику (сохранены в её релейном журнале). Неожиданный выход из строя сервера источника и переход к реплике являются безошибочными, поскольку реплика актуальна. Однако следует учесть, что источник в этом случае не может быть запущен повторно и должен быть удалён, так как его двоичный журнал может содержать неподтверждённые транзакции, которые могут вызвать конфликт с репликой при восстановлении двоичного журнала.
-
При использовании
AFTER_COMMITклиент, который выполнил транзакцию, получает статус ответа только после того, как сервер подтвердил в хранилище данных и получил подтверждение от реплики. После подтверждения и до подтверждения от реплики, другие клиенты могут видеть подтверждённую транзакцию до того, как это увидит клиент, выполняющий транзакцию.Если что-то пойдёт не так, и реплика не обработает транзакцию, то в случае неожиданного выхода из строя сервера источника и перехода к реплике, у таких клиентов может быть потеря данных относительно того, что они видели на источнике.
© 2025 Oracle
Licensed under the GPLv2 License.