Spec-Zone.ru › MySQL 8.4

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

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

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

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

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

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

  • --show-replica-auth-info

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

    Используйте --show-replica-auth-info, который отображает имена пользователей и пароли репликации в выводе SHOW REPLICAS на источнике для реплик, запущенных с параметрами --report-user и --report-password.

  • --show-slave-auth-info

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

    Устаревшее имя для --show-replica-auth-info.

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

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

  • auto_increment_increment

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

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

    Эта переменная имеет значение по умолчанию 1. Если она оставлена со значением по умолчанию, а Group Replication запускается на сервере в режиме multi-primary, она изменяется на идентификатор сервера. Дополнительные сведения см. в описании auto_increment_increment.

    Примечание

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

  • immediate_server_version

    Системная переменная 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

    Системная переменная 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

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

    AFTER_COMMIT

    Устаревший синоним для rpl_semi_sync_source_wait_point.

  • rpl_semi_sync_source_enabled

    Формат командной строки --rpl-semi-sync-source-enabled[={OFF|ON}]
    Системная переменная rpl_semi_sync_source_enabled
    Область действия Глобальная
    Динамическая Да
    SET_VAR Подсказка применяется Нет
    Тип Булево
    Значение по умолчанию OFF

    rpl_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=#
    Системная переменная 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
    Максимальное значение 4294967295

    rpl_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
    Максимальное значение 65535

    rpl_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 Подсказка применяется Нет
    Тип Булево
    Значение по умолчанию ON

    rpl_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_SYNC

    AFTER_COMMIT

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

Spec-Zone.ru

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