Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Replication Source Options and Variables

19.1.6.2 源复制选项和变量

本节描述了在源复制服务器上使用的服务器选项和系统变量。你可以在命令行选项文件中指定这些选项。你可以使用SET指定系统变量值。

在源服务器和每个副本上,你必须设置server_id系统变量,以建立唯一的复制 ID。对于每个服务器,你应该选择一个唯一的正整数,在 1 到 232 − 1 的范围内,每个 ID 都必须不同于任何其他源或副本在复制拓扑结构中使用的 ID。示例:server-id=3

有关在源服务器上控制二进制日志记录的选项,请参阅第 19.1.6.4 节,“二进制日志记录选项和变量”

源复制服务器启动选项

以下列表描述了源复制服务器的启动选项。复制相关的系统变量将在本节后面讨论。

源复制服务器系统变量

以下系统变量用于或由源复制服务器使用:

  • auto_increment_increment

    Command-Line Format --auto-increment-increment=#
    System Variable auto_increment_increment
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 65535

    自动递增增量自动递增偏移量旨在与环形(源到源)复制一起使用,可以控制 AUTO_INCREMENT 列的操作。两个变量都具有全局和会话值,每个可以假设一个介于 1 和 65,535 之间的整数值。将这两个变量中的任何一个设置为 0 将其值设置为 1。尝试将这两个变量中的任何一个设置为大于 65,535 或小于 0 的整数将其值设置为 65,535。尝试将 自动递增增量自动递增偏移量 设置为非整数值将产生错误,并且变量的实际值保持不变。

    Note

    自动递增增量 也支持与 NDB 表一起使用。

    当在服务器上启动组复制时,自动递增增量 的值将更改为 group_replication_auto_increment_increment 的值,默认为 7,而 自动递增偏移量 的值将更改为服务器 ID。这些更改将在停止组复制时撤销。这些更改仅在 自动递增增量自动递增偏移量 都具有默认值 1 时进行。如果它们的值已经从默认值修改,组复制不会更改它们。在单主模式下,组复制也不会修改这些系统变量,只有一个服务器写入。

    自动递增增量自动递增偏移量 影响 AUTO_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 列的起始点。考虑以下示例,假设这些语句是在同一个会话中执行的,例如在 自动递增增量 的描述中所示:

      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 列的表中,结果可能看起来很反直觉,因为 AUTO_INCREMENT 值系列是根据现有列值计算的,而不是根据现有列值计算的下一个值将被插入。该系列是按照以下方式计算的:

    自动递增偏移量 + N × 自动递增增量

    其中 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_incrementauto_increment_offset生成系列5 + N × 10,即[5, 15, 25, 35, 45,...]。在col列中之前的最高值是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

    Command-Line Format --auto-increment-offset=#
    System Variable auto_increment_offset
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 65535

    该变量的默认值为1。如果它保持默认值,并且在服务器上以多主模式启动Group Replication,则它将更改为服务器ID。有关更多信息,请参阅auto_increment_increment的描述。

    Note

    auto_increment_offset也支持与NDB表一起使用。

  • immediate_server_version

    System Variable immediate_server_version
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 999999
    Minimum Value 0
    Maximum Value 999999

    用于复制的内部使用。该会话系统变量持有复制拓扑结构中立即来源服务器的MySQL Server版本号(例如,80300用于MySQL 8.3.0服务器实例)。如果该立即服务器在不支持会话系统变量的版本上,则变量的值设置为0(UNKNOWN_SERVER_VERSION)。

    该变量的值从源复制到副本。在这个信息的帮助下,副本可以正确地处理来自旧版本的数据,通过识别语法更改或语义更改在相关版本之间的发生,并适当地处理它们。此信息也可以在Group Replication环境中使用,其中一个或多个成员在较新的版本上,而其他成员在较旧的版本上。该变量的值可以在二进制日志中查看每个事务(作为Gtid_log_event的一部分,或者如果服务器上不使用GTID,则为Anonymous_gtid_log_event),并且可能有助于调试跨版本复制问题。

    设置该系统变量的会话值是一个受限的操作。会话用户必须具有REPLICATION_APPLIER特权(见第 19.3.3 节,“复制权限检查”),或足以设置受限会话变量的权限(见第 7.1.9.1 节,“系统变量权限”)。然而,请注意该变量不打算供用户设置;它是由复制基础结构自动设置的。

  • original_server_version

    System Variable original_server_version
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 999999
    Minimum Value 0
    Maximum Value 999999

    用于内部复制。该会话系统变量持有事务最初提交的服务器的 MySQL 服务器版本号(例如,80300 对于 MySQL 8.3.0 服务器实例)。如果原始服务器的版本不支持该会话系统变量,则变量的值将设置为 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

    Command-Line Format --rpl-semi-sync-master-enabled[={OFF|ON}]
    System Variable rpl_semi_sync_master_enabled
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    已弃用,rpl_semi_sync_source_enabled 的同义词。

  • rpl_semi_sync_master_timeout

    Command-Line Format --rpl-semi-sync-master-timeout=#
    System Variable rpl_semi_sync_master_timeout
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 10000
    Minimum Value 0
    Maximum Value 4294967295
    Unit 毫秒

    已弃用,rpl_semi_sync_source_timeout 的同义词。

  • 半同步主服务器跟踪级别

    Command-Line Format --rpl-semi-sync-master-trace-level=#
    System Variable 半同步主服务器跟踪级别
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 32
    Minimum Value 0
    Maximum Value 4294967295

    已弃用,取代为 半同步源服务器跟踪级别

  • 半同步主服务器等待从服务器计数

    Command-Line Format --rpl-semi-sync-master-wait-for-slave-count=#
    System Variable 半同步主服务器等待从服务器计数
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 65535

    已弃用,取代为 半同步源服务器等待副本计数

  • 半同步主服务器等待无从服务器

    Command-Line Format --rpl-semi-sync-master-wait-no-slave[={OFF|ON}]
    System Variable 半同步主服务器等待无从服务器
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    已弃用,取代为 半同步源服务器等待无副本

  • 半同步主服务器等待点

    Command-Line Format --rpl-semi-sync-master-wait-point=value
    System Variable 半同步主服务器等待点
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value AFTER_SYNC
    Valid Values

    AFTER_SYNC

    AFTER_COMMIT

    已弃用,取代为 半同步源服务器等待点

  • 半同步源服务器启用

    Command-Line Format --rpl-semi-sync-source-enabled[={OFF|ON}]
    System Variable 半同步源服务器启用
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    半同步源服务器启用 在副本上安装了 rpl_semi_sync_source (semisync_source.so 库) 插件时可用,以设置半同步复制。

    半同步源服务器启用 控制是否在源服务器上启用半同步复制。要启用或禁用插件,请将该变量设置为 ONOFF(或 1 或 0)。默认值为 OFF

  • 半同步源服务器超时

    Command-Line Format --rpl-semi-sync-source-timeout=#
    System Variable 半同步源服务器超时
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 10000
    Minimum Value 0
    Maximum Value 4294967295
    Unit 毫秒

    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

    Command-Line Format --rpl-semi-sync-source-trace-level=#
    System Variable rpl_semi_sync_source_trace_level
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 32
    Minimum Value 0
    Maximum Value 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

    Command-Line Format --rpl-semi-sync-source-wait-for-replica-count=#
    System Variable rpl_semi_sync_source_wait_for_replica_count
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 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_count1,这意味着半同步复制在收到单个副本确认后继续执行。性能最好的是小值。

    例如,如果 rpl_semi_sync_source_wait_for_replica_count2,那么 2 个副本必须确认事务的接收,然后超时期限配置的 rpl_semi_sync_source_timeout 才能继续半同步复制。如果在超时期限内少于 2 个副本确认事务的接收,那么源服务器将恢复到正常复制。

    Note

    这种行为还取决于 rpl_semi_sync_source_wait_no_replica

  • rpl_semi_sync_source_wait_no_replica

    Command-Line Format --rpl-semi-sync-source-wait-no-replica[={OFF|ON}]
    System Variable rpl_semi_sync_source_wait_no_replica
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    半同步复制源等待无副本 可以在副本上安装 rpl_semi_sync_source (semisync_source.so 库) 插件时使用。

    半同步复制源等待无副本 控制源是否在超时期限内等待副本计数达到 半同步复制源等待副本计数 配置的值,或者在超时期限内等待副本计数达到该值。

    半同步复制源等待无副本 的值为 ON(默认值)时,允许副本计数在超时期限内降低到小于 半同步复制源等待副本计数 配置的值。只要在超时期限内有足够的副本确认事务,半同步复制将继续。

    半同步复制源等待无副本 的值为 OFF 时,如果副本计数在超时期限内降低到小于 半同步复制源等待副本计数 配置的值,源将恢复到正常复制。

  • 半同步复制源等待点

    Command-Line Format --rpl-semi-sync-source-wait-point=value
    System Variable 半同步复制源等待点
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value AFTER_SYNC
    Valid Values

    AFTER_SYNC

    AFTER_COMMIT

    半同步复制源等待点 可以在副本上安装 rpl_semi_sync_source (semisync_source.so 库) 插件时使用。

    半同步复制源等待点 控制半同步复制源服务器在客户端提交事务后等待副本确认事务接收的点。允许的值为:

    • AFTER_SYNC(默认值):源将每个事务写入其二进制日志和副本,sync 二进制日志到磁盘。源等待副本确认事务接收后,sync 二进制日志。然后,源提交事务到存储引擎并返回结果给客户端,客户端然后可以继续。

    • AFTER_COMMIT:源将每个事务写入其二进制日志和副本,sync 二进制日志,并提交事务到存储引擎。源等待副本确认事务接收后,返回结果给客户端,客户端然后可以继续。

    这些设置的复制特征不同如下:

    • 使用 AFTER_SYNC 时,所有客户端在同一时间看到提交的事务:在副本确认事务接收并提交到存储引擎后。因此,所有客户端在源上看到相同的数据。

      在源服务器失败的情况下,所有提交的事务都已经被复制到副本(保存到其中继日志)。源服务器的意外退出和故障转移到副本是无损的,因为副本是最新的。注意,但是源服务器不能在这种情况下重新启动,并且必须被丢弃,因为其二进制日志可能包含未提交的事务,这些事务将在二进制日志恢复后与副本发生冲突。

    • 使用 AFTER_COMMIT 时,提交事务的客户端只有在服务器提交到存储引擎并收到副本确认后才能获得返回状态。在提交和副本确认之间,其他客户端可以看到提交的事务,而提交客户端尚未收到返回状态。

      如果出现问题,使副本无法处理事务,那么在源服务器意外退出并故障转移到副本时,客户端可能会看到相对于源服务器上看到的数据丢失。