Spec-Zone.ru › MySQL 5.7

16.1.6.2 Параметры и переменные источника репликации

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

На источнике и каждом реплике необходимо установить системную переменную server_id для определения уникального идентификатора репликации. Для каждого сервера следует выбрать уникальное положительное целое число в диапазоне от 1 до 232 − 1, и каждый идентификатор должен отличаться от всех остальных идентификаторов, используемых любым другим источником или репликой в топологии репликации. Пример: server-id=3.

Для параметров, используемых на источнике для управления двоичным протоколированием, см. Раздел 16.1.6.4 «Параметры и переменные двоичного протоколирования».

Параметры запуска для серверов-источников репликации

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

  • --show-slave-auth-info

    Формат командной строки --show-slave-auth-info[={OFF|ON}]
    Тип Булево
    Значение по умолчанию OFF

    Отображает имена пользователей и пароли реплик в выводе SHOW SLAVE HOSTS на сервере-источнике для реплик, запущенных с параметрами --report-user и --report-password.

Системные переменные, используемые на серверах-источниках репликации

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

  • auto_increment_increment

    Формат командной строки --auto-increment-increment=#
    Системная переменная auto_increment_increment
    Область действия Глобальная, сессионная
    Динамическая Да
    Тип Целое число
    Значение по умолчанию 1
    Минимальное значение 1
    Максимальное значение 65535

    auto_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=#
    Системная переменная auto_increment_offset
    Область действия Глобальная, сессионная
    Динамическая Да
    Тип Целое число
    Значение по умолчанию 1
    Минимальное значение 1
    Максимальное значение 65535

    Эта переменная имеет значение по умолчанию 1. Если она остаётся со значением по умолчанию, а Group Replication запущена на сервере, она изменяется на идентификатор сервера. Дополнительную информацию см. в описании auto_increment_increment.

    Примечание

    auto_increment_offset также поддерживается для использования с таблицами NDB.

  • rpl_semi_sync_master_enabled

    Формат командной строки --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=#
    Системная переменная 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_SYNC

    AFTER_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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/replication-options-source.html

Spec-Zone.ru

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