Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

19.1.6.2 复制源选项和变量

本节描述了复制源服务器上的服务器选项和系统变量。您可以使用命令行或选项文件来指定选项。您可以使用SET语句来指定系统变量值。

在源服务器和每个副本上,您必须设置server_id系统变量以建立唯一的复制ID。对于每个服务器,您应该选择一个唯一的正整数,范围从1到232 − 1,每个ID都不能与其他ID相同,来自同一个源或副本的ID。

用于控制二进制日志的选项,请参见Section 19.1.6.4, “Binary Logging Options and Variables”

复制源服务器的启动选项

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

复制源服务器上的系统变量

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

  • 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_incrementauto_increment_offset旨在与循环复制(源到源)复制一起使用,可以控制AUTO_INCREMENT 列的操作。两个变量都具有全局和会话值,每个变量都可以假设一个介于1和65,535之间的整数值。将这两个变量中的任何一个设置为0将其值设置为1。尝试将这两个变量中的任何一个设置为介于0和65,535之间的整数值将其值设置为65,535。尝试将auto_increment_incrementauto_increment_offset 设置为非整数值将产生错误,并且实际变量的值保持不变。

    Note

    auto_increment_increment 也支持在NDB 表中使用。

    当 Group Replication 在服务器上启动时,auto_increment_increment 的值将被更改为group_replication_auto_increment_increment 的值,该值默认为7,auto_increment_offset 的值将被设置为服务器ID。更改将在 Group Replication 停止时被撤销。这些更改仅在auto_increment_incrementauto_increment_offset 每个变量都具有默认值1时才进行。如果它们的值已经被修改为默认值,Group Replication 不会对它们进行修改。这些系统变量在 Group Replication 中的单个主服务器模式中不进行修改,其中只有一个服务器写入。

    auto_increment_incrementauto_increment_offsetAUTO_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_incrementauto_increment_offset值生成系列5 + N × 10,即[5, 15, 25, 35, 45,...]。在INSERT之前SELECT查询结果显示的最高值为31,下一个可用的AUTO_INCREMENT系列值为35,因此插入的AUTO_INCREMENT值从该点开始,并且结果如SELECT查询所示。

    不能限制这两个变量的影响到单个表;这两个变量控制MySQL服务器上的所有AUTO_INCREMENT列的行为。如果全局值之一被设置,它的影响将持续到全局值被更改或覆盖为会话值,或者直到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版本号(例如,80400为MySQL 8.4.0服务器实例)。如果源服务器的版本不支持会话系统变量,该变量的值将被设置为0(UNKNOWN_SERVER_VERSION)。

    变量的值将从源服务器复制到副本。使用该信息副本可以正确处理来自源服务器的数据,识别语法或语义变化,并相应地处理这些变化。该信息也可以在Group Replication环境中使用,其中一个或多个成员在Group Replication组中是最新版本的。变量的值可以在每个事务中查看(作为Gtid_log_eventAnonymous_gtid_log_event),并且可以帮助解决跨版本复制问题。

    设置会话变量的值是受限制的操作。会话用户必须具有REPLICATION_APPLIER特权(见第19.3.3节,“Replication Privilege Checks”),或具有足够的特权以设置受限制的会话变量(见第7.1.9.1节,“System Variable Privileges”)。然而,请注意该变量不是用户设置的;它是由复制基础结构自动设置的。

  • original_server_version

    System Variable original_server_version
    Scope Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 999999
    Minimum Value 0
    Maximum Value 999999

    用于内部使用的复制。该会话系统变量保存了事务最初提交的 MySQL 服务器版本号(例如,80400表示 MySQL 8.4.0 服务器实例)。如果原始服务器的版本不支持会话系统变量,该变量的值将设置为 0 (UNKNOWN_SERVER_VERSION)。请注意,如果原始服务器设置了版本号,该变量的值将在不支持会话系统变量的服务器或其他在复制拓扑结构中的服务器上重置为 0。

    该变量的值在同样方式下被设置和使用,如immediate_server_version系统变量。如果该变量的值与immediate_server_version系统变量的值相同,只记录后者在二进制日志中,并添加一个指示原始服务器版本相同的标志。

    在 Group Replication 环境中,查看更改日志事件,这些事件是每个组成员在加入组时排队的特殊事务。这些事件将标记组成员排队事务的服务器版本。这确保了原始捐助者的服务器版本被知晓。由于查看更改日志事件排队的特定查看更改事件在所有成员上具有相同的 GTID,对于这种情况,只有相同 GTID 的实例可能具有不同的原始服务器版本。

    设置会话变量的值是一个受限制的操作。会话用户必须具有REPLICATION_APPLIER特权(见第19.3.3节,“Replication Privilege Checks”),或具有设置受限制的会话变量的特权(见第7.1.9.1节,“System Variable Privileges”)。然而,请注意该变量不是用户设置的;它是由复制基础结构自动设置的。

  • 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

    已弃用,synonym for 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 毫秒

    已弃用,synonym for rpl_semi_sync_source_timeout.

  • rpl_semi_sync_master_trace_level

    Command-Line Format --rpl-semi-sync-master-trace-level=#
    System Variable rpl_semi_sync_master_trace_level
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 32
    Minimum Value 0
    Maximum Value 4294967295

    已弃用,synonym for rpl_semi_sync_source_trace_level.

  • rpl_semi_sync_master_wait_for_slave_count

    Command-Line Format --rpl-semi-sync-master-wait-for-slave-count=#
    System Variable rpl_semi_sync_master_wait_for_slave_count
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 65535

    已弃用,synonym for rpl_semi_sync_source_wait_for_replica_count.

  • rpl_semi_sync_master_wait_no_slave

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

    已弃用,synonym for rpl_semi_sync_source_wait_no_replica.

  • rpl_semi_sync_master_wait_point

    Command-Line Format --rpl-semi-sync-master-wait-point=value
    System Variable rpl_semi_sync_master_wait_point
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value AFTER_SYNC
    Valid Values

    AFTER_SYNC

    AFTER_COMMIT

    已弃用,synonym for rpl_semi_sync_source_wait_point.

  • rpl_semi_sync_source_enabled

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

    rpl_semi_sync_source_enabled is available when the rpl_semi_sync_source (semisync_source.so library) plugin was installed on the replica to set up semisynchronous replication.

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

  • rpl_semi_sync_source_timeout

    Command-Line Format --rpl-semi-sync-source-timeout=#
    System Variable rpl_semi_sync_source_timeout
    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 指定源服务器上的半同步复制调试 trace 等级。四个等级定义:

    • 1 = 一般等级(例如,时间函数失败)

    • 16 = 详细等级(更多的verbose信息)

    • 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_sourcesemisync_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个复制服务器必须确认事务的接收,然后半同步复制才能继续进行。如果在超时期限内少于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_wait_no_replica在安装了rpl_semi_sync_sourcesemisync_source.so库)插件的复制服务器上可用。

    rpl_semi_sync_source_wait_no_replica控制是否在超时期限内,复制服务器数量少于配置的数量时,源等待超时期限的到期,或者在超时期限内少于配置的数量时,源返回正常复制。

    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

    Command-Line Format --rpl-semi-sync-source-wait-point=value
    System Variable rpl_semi_sync_source_wait_point
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value AFTER_SYNC
    Valid Values

    AFTER_SYNC

    AFTER_COMMIT

    rpl_semi_sync_source_wait_point在安装在副本上的rpl_semi_sync_sourcesemisync_source.so库)插件时可用。

    rpl_semi_sync_source_wait_point控制半同步复制源服务器在返回客户端事务结果之前等待副本确认事务接收的点。这些值是允许的:

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

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

    这些设置的复制特性不同:

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

      源服务器故障时,所有在源服务器上提交的事务已经被复制到副本(保存在副本的中继日志中)。源服务器的突然退出和对副本的故障转移是无损的,因为副本是最新的。请注意,在这种情况下,源服务器不能重新启动,因为它的二进制日志可能包含未提交的事务,这将与副本在恢复二进制日志时产生冲突。

    • 使用 AFTER_COMMIT,客户端提交事务的客户端将在服务器将事务提交到存储引擎并收到副本确认后才能收到返回状态。在提交事务和收到副本确认之间,其他客户端可以在提交客户端之前看到已经提交的事务。

      如果副本不能处理事务,那么在源服务器突然退出和对副本的故障转移时,这些客户端可能会看到与源服务器上看到的数据不同。