19.1.6.2 复制源选项和变量
本节描述了复制源服务器上的服务器选项和系统变量。您可以使用命令行或选项文件来指定选项。您可以使用SET
语句来指定系统变量值。
在源服务器和每个副本上,您必须设置server_id
系统变量以建立唯一的复制ID。对于每个服务器,您应该选择一个唯一的正整数,范围从1到232 − 1,每个ID都不能与其他ID相同,来自同一个源或副本的ID。
用于控制二进制日志的选项,请参见Section 19.1.6.4, “Binary Logging Options and Variables”。
复制源服务器的启动选项
以下是控制复制源服务器的启动选项。复制相关的系统变量将在本节后面讨论。
-
Command-Line Format --show-replica-auth-info[={OFF|ON}]
Type Boolean Default Value OFF
使用
--show-replica-auth-info
,显示复制用户名称和密码在SHOW REPLICAS
的输出中,用于副本启动时使用--report-user
和--report-password
选项。 -
Command-Line Format --show-slave-auth-info[={OFF|ON}]
Deprecated Yes Type Boolean 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_increment
和auto_increment_offset
旨在与循环复制(源到源)复制一起使用,可以控制AUTO_INCREMENT
列的操作。两个变量都具有全局和会话值,每个变量都可以假设一个介于1和65,535之间的整数值。将这两个变量中的任何一个设置为0将其值设置为1。尝试将这两个变量中的任何一个设置为介于0和65,535之间的整数值将其值设置为65,535。尝试将auto_increment_increment
或auto_increment_offset
设置为非整数值将产生错误,并且实际变量的值保持不变。Noteauto_increment_increment
也支持在NDB
表中使用。当 Group Replication 在服务器上启动时,
auto_increment_increment
的值将被更改为group_replication_auto_increment_increment
的值,该值默认为7,auto_increment_offset
的值将被设置为服务器ID。更改将在 Group Replication 停止时被撤销。这些更改仅在auto_increment_increment
和auto_increment_offset
每个变量都具有默认值1时才进行。如果它们的值已经被修改为默认值,Group Replication 不会对它们进行修改。这些系统变量在 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,...]。在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”。 -
-
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版本号(例如,
80400
为MySQL 8.4.0服务器实例)。如果源服务器的版本不支持会话系统变量,该变量的值将被设置为0(UNKNOWN_SERVER_VERSION
)。变量的值将从源服务器复制到副本。使用该信息副本可以正确处理来自源服务器的数据,识别语法或语义变化,并相应地处理这些变化。该信息也可以在Group Replication环境中使用,其中一个或多个成员在Group Replication组中是最新版本的。变量的值可以在每个事务中查看(作为
Gtid_log_event
或Anonymous_gtid_log_event
),并且可以帮助解决跨版本复制问题。设置会话变量的值是受限制的操作。会话用户必须具有
REPLICATION_APPLIER
特权(见第19.3.3节,“Replication Privilege Checks”),或具有足够的特权以设置受限制的会话变量(见第7.1.9.1节,“System Variable Privileges”)。然而,请注意该变量不是用户设置的;它是由复制基础结构自动设置的。 -
System Variable original_server_version
Scope Session Dynamic Yes SET_VAR
Hint AppliesNo 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”)。然而,请注意该变量不是用户设置的;它是由复制基础结构自动设置的。 -
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
. -
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
. -
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 therpl_semi_sync_source
(semisync_source.so
library) plugin was installed on the replica to set up semisynchronous replication.rpl_semi_sync_source_enabled
控制源服务器上半同步复制是否启用。要启用或禁用插件,请将该变量设置为ON
或OFF
(或 1 或 0),分别。默认值为OFF
。 -
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_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个复制服务器必须确认事务的接收,然后半同步复制才能继续进行。如果在超时期限内少于2个复制服务器确认事务的接收,源将返回正常复制。Note -
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_source
(semisync_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_source
(semisync_source.so
库)插件时可用。rpl_semi_sync_source_wait_point
控制半同步复制源服务器在返回客户端事务结果之前等待副本确认事务接收的点。这些值是允许的:-
AFTER_SYNC
(默认):源将每个事务写入到二进制日志和副本中,并将二进制日志同步到磁盘。源等待副本确认事务接收后,然后将事务提交到存储引擎,并返回结果给客户端,客户端然后可以继续。 -
AFTER_COMMIT
:源将每个事务写入到二进制日志和副本中,同步二进制日志,并将事务提交到存储引擎。源等待副本确认事务接收后,然后返回结果给客户端,客户端然后可以继续。
这些设置的复制特性不同:
-
使用
AFTER_SYNC
时,所有客户端在同一时间看到已经确认的事务:在副本确认和存储引擎提交事务后。因此,所有客户端在源上看到相同的数据。源服务器故障时,所有在源服务器上提交的事务已经被复制到副本(保存在副本的中继日志中)。源服务器的突然退出和对副本的故障转移是无损的,因为副本是最新的。请注意,在这种情况下,源服务器不能重新启动,因为它的二进制日志可能包含未提交的事务,这将与副本在恢复二进制日志时产生冲突。
-
使用
AFTER_COMMIT
,客户端提交事务的客户端将在服务器将事务提交到存储引擎并收到副本确认后才能收到返回状态。在提交事务和收到副本确认之间,其他客户端可以在提交客户端之前看到已经提交的事务。如果副本不能处理事务,那么在源服务器突然退出和对副本的故障转移时,这些客户端可能会看到与源服务器上看到的数据不同。
-