本节描述了在源复制服务器上使用的服务器选项和系统变量。你可以在命令行或选项文件中指定这些选项。你可以使用SET
指定系统变量值。
在源服务器和每个副本上,你必须设置server_id
系统变量,以建立唯一的复制 ID。对于每个服务器,你应该选择一个唯一的正整数,在 1 到 232 − 1 的范围内,每个 ID 都必须不同于任何其他源或副本在复制拓扑结构中使用的 ID。示例:server-id=3
。
有关在源服务器上控制二进制日志记录的选项,请参阅第 19.1.6.4 节,“二进制日志记录选项和变量”。
以下列表描述了源复制服务器的启动选项。复制相关的系统变量将在本节后面讨论。
-
Command-Line Format --show-replica-auth-info[={OFF|ON}]
Type 布尔值 Default Value OFF
使用
--show-replica-auth-info
,它在源服务器上显示副本用户名和密码在SHOW REPLICAS
的输出中,用于启动副本服务器的--report-user
和--report-password
选项。 -
Command-Line Format --show-slave-auth-info[={OFF|ON}]
Deprecated 是 Type 布尔值 Default Value OFF
已弃用的别名
--show-replica-auth-info
。
以下系统变量用于或由源复制服务器使用:
-
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。尝试将自动递增增量
或自动递增偏移量
设置为非整数值将产生错误,并且变量的实际值保持不变。当在服务器上启动组复制时,
自动递增增量
的值将更改为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_increment
和auto_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”。 -
-
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
的描述。Noteauto_increment_offset
也支持与NDB
表一起使用。 -
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 节,“系统变量权限”)。然而,请注意该变量不打算供用户设置;它是由复制基础结构自动设置的。 -
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 节,“系统变量权限”)。然而,请注意该变量不打算供用户设置;它是由复制基础结构自动设置的。 -
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
的同义词。 -
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
库) 插件时可用,以设置半同步复制。半同步源服务器启用
控制是否在源服务器上启用半同步复制。要启用或禁用插件,请将该变量设置为ON
或OFF
(或 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_count
是1
,这意味着半同步复制在收到单个副本确认后继续执行。性能最好的是小值。例如,如果
rpl_semi_sync_source_wait_for_replica_count
是2
,那么 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
时,提交事务的客户端只有在服务器提交到存储引擎并收到副本确认后才能获得返回状态。在提交和副本确认之间,其他客户端可以看到提交的事务,而提交客户端尚未收到返回状态。如果出现问题,使副本无法处理事务,那么在源服务器意外退出并故障转移到副本时,客户端可能会看到相对于源服务器上看到的数据丢失。
-