16.1.6.2 Параметры и переменные источника репликации
В этом разделе описываются параметры сервера и системные переменные, которые можно использовать на серверах-источниках репликации. Вы можете указать параметры либо в командной строке, либо в файле параметров. Значения системных переменных можно задать с помощью SET.
На источнике и каждом реплике необходимо установить системную переменную server_id для определения уникального идентификатора репликации. Для каждого сервера следует выбрать уникальное положительное целое число в диапазоне от 1 до 232 − 1, и каждый идентификатор должен отличаться от всех остальных идентификаторов, используемых любым другим источником или репликой в топологии репликации. Пример: server-id=3.
Для параметров, используемых на источнике для управления двоичным протоколированием, см. Раздел 16.1.6.4 «Параметры и переменные двоичного протоколирования».
Параметры запуска для серверов-источников репликации
В следующем списке описываются параметры запуска для управления серверами-источниками репликации. Системные переменные, относящиеся к репликации, обсуждаются далее в этом разделе.
-
Формат командной строки --show-slave-auth-info[={OFF|ON}]Тип Булево Значение по умолчанию OFFОтображает имена пользователей и пароли реплик в выводе
SHOW SLAVE HOSTSна сервере-источнике для реплик, запущенных с параметрами--report-userи--report-password.
Системные переменные, используемые на серверах-источниках репликации
Следующие системные переменные используются для управления источниками:
-
Формат командной строки --auto-increment-increment=#Системная переменная auto_increment_incrementОбласть действия Глобальная, сессионная Динамическая Да Тип Целое число Значение по умолчанию 1Минимальное значение 1Максимальное значение 65535auto_increment_incrementиauto_increment_offsetпредназначены для использования с репликацией источник-источник и могут использоваться для управления работой столбцовAUTO_INCREMENT. Обе переменные имеют глобальные и сессионные значения, и каждое из них может принимать целое значение от 1 до 65 535 включительно. Установка значения любой из этих двух переменных в 0 приводит к установке её значения в 1. Попытка установить значение любой из этих двух переменных на целое число больше 65 535 или меньше 0 приводит к установке её значения в 65 535. Попытка установить значение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 их не изменяет.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. См. Раздел 16.4.1.1, «Репликация и AUTO_INCREMENT». -
-
Формат командной строки --auto-increment-offset=#Системная переменная auto_increment_offsetОбласть действия Глобальная, сессионная Динамическая Да Тип Целое число Значение по умолчанию 1Минимальное значение 1Максимальное значение 65535Эта переменная имеет значение по умолчанию 1. Если она остаётся со значением по умолчанию, а Group Replication запущена на сервере, она изменяется на идентификатор сервера. Дополнительную информацию см. в описании
auto_increment_increment.Примечаниеauto_increment_offsetтакже поддерживается для использования с таблицамиNDB. -
Формат командной строки --rpl-semi-sync-master-enabled[={OFF|ON}]Системная переменная rpl_semi_sync_master_enabledОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFУправляет включением полусинхронной репликации на источнике. Для включения или выключения плагина установите эту переменную в
ONилиOFF(или 1 или 0) соответственно. По умолчаниюOFF.Эта переменная доступна только при установке плагина полусинхронной репликации на стороне источника.
-
Формат командной строки --rpl-semi-sync-master-timeout=#Системная переменная rpl_semi_sync_master_timeoutОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295Единица измерения миллисекунды Значение в миллисекундах, контролирующее, сколько времени источник ждёт подтверждения от реплики перед истечением срока ожидания и возвращением к асинхронной репликации. Значение по умолчанию равно 10000 (10 секунд).
Эта переменная доступна только при установке плагина полусинхронной репликации на стороне источника.
-
rpl_semi_sync_master_trace_levelФормат командной строки --rpl-semi-sync-master-trace-level=#Системная переменная rpl_semi_sync_master_trace_levelОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 32Минимальное значение 0Максимальное значение 4294967295Уровень отладки слежения репликации с полусинхронным режимом на источнике. Определены четыре уровня:
1 = общий уровень (например, ошибки функций времени)
16 = подробный уровень (более подробная информация)
32 = уровень ожидания сети (более подробная информация об ожиданиях сети)
64 = уровень функции (информация о входе и выходе из функции)
Эта переменная доступна только при установке плагина полусинхронной репликации на стороне источника.
-
rpl_semi_sync_master_wait_for_slave_countФормат командной строки --rpl-semi-sync-master-wait-for-slave-count=#Системная переменная rpl_semi_sync_master_wait_for_slave_countОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 1Минимальное значение 1Максимальное значение 65535Количество подтверждений от реплик, которые должен получить источник за транзакцию, прежде чем продолжить. По умолчанию
rpl_semi_sync_master_wait_for_slave_countравно1, что означает, что полусинхронная репликация происходит после получения одного подтверждения от реплики. Лучшая производительность достигается для малых значений этой переменной.Например, если
rpl_semi_sync_master_wait_for_slave_countравно2, то 2 реплики должны подтвердить получение транзакции до истечения периода ожидания, настроенного параметромrpl_semi_sync_master_timeoutдля полусинхронной репликации. Если меньше реплик подтверждают получение транзакции в течение периода ожидания, источник возвращается к нормальной репликации.ПримечаниеЭто поведение также зависит от
rpl_semi_sync_master_wait_no_slaveЭта переменная доступна только при установке плагина полусинхронной репликации на стороне источника.
-
rpl_semi_sync_master_wait_no_slaveФормат командной строки --rpl-semi-sync-master-wait-no-slave[={OFF|ON}]Системная переменная rpl_semi_sync_master_wait_no_slaveОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию ONУправляет тем, ожидает ли источник истечения периода ожидания, настроенного параметром
rpl_semi_sync_master_timeout, даже если количество реплик уменьшилось до меньше, чем количество реплик, настроенное параметромrpl_semi_sync_master_wait_for_slave_countво время этого периода ожидания.Когда значение
rpl_semi_sync_master_wait_no_slaveравноON(по умолчанию), разрешается, чтобы количество реплик уменьшилось до меньше, чемrpl_semi_sync_master_wait_for_slave_countво время периода ожидания. Пока достаточно реплик подтверждают транзакцию до истечения периода ожидания, полусинхронная репликация продолжается.Когда значение
rpl_semi_sync_master_wait_no_slaveравноOFF, если количество реплик уменьшается до меньше, чем количество, настроенное вrpl_semi_sync_master_wait_for_slave_countв любой момент во время периода ожидания, настроенного параметромrpl_semi_sync_master_timeout, источник возвращается к нормальной репликации.Эта переменная доступна только при установке плагина полусинхронной репликации на стороне источника.
-
rpl_semi_sync_master_wait_pointФормат командной строки --rpl-semi-sync-master-wait-point=valueСистемная переменная rpl_semi_sync_master_wait_pointОбласть действия Глобальная Динамическая Да Тип Перечисление Значение по умолчанию AFTER_SYNCДопустимые значения AFTER_SYNCAFTER_COMMITЭта переменная управляет моментом, когда источник ожидает подтверждения от реплики о получении транзакции, прежде чем вернуть клиенту статус о завершении транзакции. Разрешены следующие значения:
AFTER_SYNC(по умолчанию): Источник записывает каждую транзакцию в свой двоичный журнал и реплику, и синхронизирует двоичный журнал на диск. Источник ожидает подтверждения от реплики о получении транзакции после синхронизации. После получения подтверждения источник фиксирует транзакцию в хранилище данных и возвращает результат клиенту, который может продолжить работу.AFTER_COMMIT: Источник записывает каждую транзакцию в свой двоичный журнал и реплику, синхронизирует двоичный журнал и фиксирует транзакцию в хранилище данных. Источник ожидает подтверждения от реплики о получении транзакции после фиксации. После получения подтверждения источник возвращает результат клиенту, который может продолжить работу.
Репликация отличается следующим образом:
-
При использовании
AFTER_SYNC, все клиенты видят зафиксированную транзакцию в одно и то же время: После того, как она была подтверждена репликой и зафиксирована в хранилище данных на источнике. Таким образом, все клиенты видят одинаковые данные на источнике.В случае отказа источника все транзакции, зафиксированные на источнике, были реплицированы на реплику (сохранены в её журнале пересылки). Неожиданный выход источника и переход к реплике не приводит к потерям данных, так как реплика обновлена. Однако, источник нельзя перезапустить в этом сценарии и его нужно заменить, так как его двоичный журнал может содержать незафиксированные транзакции, которые могут вызвать конфликт с репликой при восстановлении из двоичного журнала.
-
При использовании
AFTER_COMMIT, клиент, отправляющий транзакцию, получает статус только после того, как сервер фиксирует её в хранилище данных и получает подтверждение от реплики. После фиксации и до подтверждения от реплики другие клиенты могут увидеть зафиксированную транзакцию до клиента, отправляющего её.Если что-то пойдёт не так, и реплика не обработает транзакцию, то в случае неожиданного выхода источника и перехода к реплике, возможно, что такие клиенты увидят потерю данных относительно того, что они видели на источнике.
Эта переменная доступна только при установке плагина полусинхронной репликации на стороне источника.
rpl_semi_sync_master_wait_pointбыл добавлен в MySQL 5.7.2. В более старых версиях поведение полусинхронного источника эквивалентно настройкеAFTER_COMMIT.Это изменение вводит ограничение совместимости версий, так как оно увеличивает версию полусинхронного интерфейса: Серверы MySQL 5.7.2 и выше не работают с плагинами полусинхронной репликации из более ранних версий, и серверы из более ранних версий не работают с плагинами полусинхронной репликации MySQL 5.7.2 и выше.
© 2025 Oracle
Licensed under the GPLv2 License.