本节介绍可在复制源服务器上使用的服务器选项和系统变量。您可以在
命令行或
选项文件中指定选项。您可以使用指定系统变量值
SET
。
在源和每个副本上,您必须设置
server_id
系统变量以建立唯一的复制 ID。对于每个服务器,您应该在 1 到 2 ·32 − 1的范围内选择一个唯一的正整数,并且每个 ID 必须不同于复制拓扑中任何其他源或副本使用的每个其他 ID。例子:
server-id=3
。
有关源上用于控制二进制日志记录的选项,请参阅 第 17.1.6.4 节,“二进制日志记录选项和变量”。
以下列表描述了用于控制复制源服务器的启动选项。与复制相关的系统变量将在本节后面讨论。
-
命令行格式 --show-replica-auth-info[={OFF|ON}]
介绍 8.0.26 类型 布尔值 默认值 OFF
从 MySQL 8.0.26 开始,使用
--show-replica-auth-info
,在 MySQL 8.0.26 之前,使用--show-slave-auth-info
. 这两个选项具有相同的效果。对于以和 选项开始的副本,选项在源上SHOW REPLICAS
(或在 MySQL 8.0.22 之前 )的输出中显示复制用户名和密码 。SHOW SLAVE HOSTS
--report-user
--report-password
-
命令行格式 --show-slave-auth-info[={OFF|ON}]
弃用 8.0.26 类型 布尔值 默认值 OFF
在 MySQL 8.0.26 之前使用此选项而不是
--show-replica-auth-info
. 这两个选项具有相同的效果。
以下系统变量用于复制源服务器或由复制源服务器使用:
-
命令行格式 --auto-increment-increment=#
系统变量 auto_increment_increment
范围 全局,会话 动态的 是的 SET_VAR
提示适用是的 类型 整数 默认值 1
最小值 1
最大值 65535
auto_increment_increment
并且auto_increment_offset
旨在与循环(源到源)复制一起使用,并且可用于控制AUTO_INCREMENT
列的操作。这两个变量都有全局值和会话值,并且每个变量都可以采用 1 到 65,535(含)之间的整数值。将这两个变量中的任何一个的值设置为 0 会导致其值被设置为 1。尝试将这两个变量中的任何一个的值设置为大于 65,535 或小于 0 的整数会导致其值被设置为 65,535。试图设置auto_increment_increment
或 的值auto_increment_offset
为非整数值会产生错误,并且变量的实际值保持不变。笔记auto_increment_increment
也支持与NDB
表格一起使用。从MySQL 8.0.18开始,设置这个系统变量的session值不再是受限操作。
在服务器上启动Group Replication时,将 的值
auto_increment_increment
更改为 的值group_replication_auto_increment_increment
,默认为7,并将 的值auto_increment_offset
更改为服务器ID。当 Group Replication 停止时,更改将恢复。只有当每个更改的默认值为 1时,才会进行和恢复这些更改auto_increment_increment
。auto_increment_offset
如果它们的值已经从默认值修改,组复制不会更改它们。从 MySQL 8.0 开始,当 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, ...]。之前列中的最大值col
是INSERT
31,系列中的下一个可用值AUTO_INCREMENT
是 35,因此从该点开始插入的值col
和结果如SELECT
查询所示。不可能将这两个变量的影响限制在一个表中;这些变量控制MySQL 服务器上所有
AUTO_INCREMENT
表中所有列 的行为。如果设置了任一变量的全局值,它的影响将持续到全局值被更改或通过设置会话值覆盖,或者直到mysqld重新启动。如果设置了本地值,则新值将影响 当前用户在会话期间插入新行的所有表的列,除非在该会话期间更改了值。AUTO_INCREMENT
默认值为
auto_increment_increment
1。请参阅 第 17.5.1.1 节,“复制和 AUTO_INCREMENT”。 -
命令行格式 --auto-increment-offset=#
系统变量 auto_increment_offset
范围 全局,会话 动态的 是的 SET_VAR
提示适用是的 类型 整数 默认值 1
最小值 1
最大值 65535
该变量的默认值为1。如果保留默认值,并且在多主模式的服务器上启动Group Replication,则将其更改为服务器ID。有关详细信息,请参阅 的说明
auto_increment_increment
。笔记auto_increment_offset
也支持与NDB
表格一起使用。从MySQL 8.0.18开始,设置这个系统变量的session值不再是受限操作。
-
介绍 8.0.14 系统变量 immediate_server_version
范围 会议 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 999999
最小值 0
最大值 999999
供复制内部使用。此会话系统变量保存服务器的 MySQL 服务器版本号,该服务器是复制拓扑中的直接源(例如,
80014
对于 MySQL 8.0.14 服务器实例)。如果此直接服务器的版本不支持会话系统变量,则该变量的值设置为 0 (UNKNOWN_SERVER_VERSION
)。变量的值从源复制到副本。有了这些信息,副本可以正确地处理源自旧版本源的数据,方法是识别所涉及的版本之间发生语法更改或语义更改的位置并适当地处理这些更改。该信息还可用于组复制环境,其中复制组的一个或多个成员的版本比其他成员更新。可以在每个事务的二进制日志中查看变量的值(作为
Gtid_log_event
, 或Anonymous_gtid_log_event
如果 GTID 未在服务器上使用),并且可能有助于调试跨版本复制问题。设置这个系统变量的会话值是一个受限的操作。会话用户必须具有
REPLICATION_APPLIER
权限(请参阅第 17.3.3 节,“复制权限检查”),或足以设置受限会话变量的权限(请参阅第 5.1.9.1 节,“系统变量权限”)。但是请注意,该变量不是供用户设置的;它由复制基础设施自动设置。 -
介绍 8.0.14 系统变量 original_server_version
范围 会议 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 999999
最小值 0
最大值 999999
供复制内部使用。此会话系统变量保存最初提交事务的服务器的 MySQL 服务器版本号(例如,
80014
对于 MySQL 8.0.14 服务器实例)。如果此原始服务器的版本不支持会话系统变量,则该变量的值将设置为 0 (UNKNOWN_SERVER_VERSION
)。请注意,当原始服务器设置发布号时,如果复制拓扑中的直接服务器或任何其他中间服务器不支持会话系统变量,则变量的值将重置为 0,因此不会复制其值.变量值的设置和使用方式与
immediate_server_version
系统变量相同。如果变量的值与系统变量的值相同,immediate_server_version
则二进制日志中只记录后者,并指示原始服务器版本相同。在组复制环境中,查看更改日志事件是每个组成员在新成员加入组时排队的特殊事务,标记有排队事务的组成员的服务器版本。这确保加入成员知道原始捐赠者的服务器版本。由于为特定视图更改排队的视图更改日志事件在所有成员上具有相同的 GTID,因此仅对于这种情况,相同 GTID 的实例可能具有不同的原始服务器版本。
设置这个系统变量的会话值是一个受限的操作。会话用户必须具有
REPLICATION_APPLIER
权限(请参阅第 17.3.3 节,“复制权限检查”),或足以设置受限会话变量的权限(请参阅第 5.1.9.1 节,“系统变量权限”)。但是请注意,该变量不是供用户设置的;它由复制基础设施自动设置。 -
命令行格式 --rpl-semi-sync-master-enabled[={OFF|ON}]
系统变量 rpl_semi_sync_master_enabled
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
控制是否在源服务器上启用半同步复制。要启用或禁用插件,请分别将此变量设置为
ON
或OFF
(或 1 或 0)。默认值为OFF
。此变量仅在安装源端半同步复制插件时可用。
-
命令行格式 --rpl-semi-sync-master-timeout=#
系统变量 rpl_semi_sync_master_timeout
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 10000
最小值 0
最大值 4294967295
单元 毫秒 一个以毫秒为单位的值,它控制源在超时和恢复到异步复制之前等待提交以确认来自副本的时间。默认值为 10000(10 秒)。
此变量仅在安装源端半同步复制插件时可用。
rpl_semi_sync_master_trace_level
命令行格式 --rpl-semi-sync-master-trace-level=#
系统变量 rpl_semi_sync_master_trace_level
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 32
最小值 0
最大值 4294967295
源服务器上的半同步复制调试跟踪级别。定义了四个级别:
1 = 一般级别(例如,时间功能故障)
16 = 详细程度(更详细的信息)
32 = 净等待级别(有关网络等待的更多信息)
64 = 功能级别(有关功能进入和退出的信息)
此变量仅在安装源端半同步复制插件时可用。
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_master_wait_for_slave_count
是1
,这意味着半同步复制在收到单个副本确认后继续进行。此变量的小值性能最佳。例如,如果
rpl_semi_sync_master_wait_for_slave_count
是2
,则 2 个副本必须在为半同步复制配置的超时期限之前确认收到事务rpl_semi_sync_master_timeout
。如果在超时期间确认收到事务的副本较少,则源恢复正常复制。笔记这种行为也取决于
rpl_semi_sync_master_wait_no_slave
此变量仅在安装源端半同步复制插件时可用。
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_master_timeout
到期,即使副本计数下降到小于 超时期间配置的副本数量rpl_semi_sync_master_wait_for_slave_count
。当值为
rpl_semi_sync_master_wait_no_slave
( 默认值)时,允许副本计数 在超时期间ON
下降到小于 。rpl_semi_sync_master_wait_for_slave_count
只要在超时期限到期之前有足够的副本确认事务,半同步复制就会继续。当 的值为 时
rpl_semi_sync_master_wait_no_slave
, 如果副本计数 在 的配置的超时期限内的任何时候OFF
下降到小于配置的数量 ,则源恢复正常复制。rpl_semi_sync_master_wait_for_slave_count
rpl_semi_sync_master_timeout
此变量仅在安装源端半同步复制插件时可用。
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
此变量控制半同步复制源服务器在将状态返回给提交事务的客户端之前等待事务接收的副本确认的时间点。这些值是允许的:
AFTER_SYNC
(默认):源将每个事务写入其二进制日志和副本,并将二进制日志同步到磁盘。同步后,源等待事务接收的副本确认。收到确认后,源将事务提交给存储引擎并将结果返回给客户端,然后客户端可以继续进行。AFTER_COMMIT
:源将每个事务写入其二进制日志和副本,同步二进制日志,并将事务提交给存储引擎。源在提交后等待事务接收的副本确认。收到确认后,源将结果返回给客户端,然后客户端可以继续。
这些设置的复制特征不同如下:
使用
AFTER_SYNC
,所有客户端同时看到提交的事务:在它被副本确认并提交到源上的存储引擎之后。因此,所有客户端都在源上看到相同的数据。在源发生故障的情况下,在源上提交的所有事务都已复制到副本(保存到其中继日志)。源服务器的意外退出和故障转移到副本是无损的,因为副本是最新的。但是请注意,在这种情况下不能重新启动源,必须将其丢弃,因为其二进制日志可能包含未提交的事务,这些事务在二进制日志恢复后外部化时会导致与副本发生冲突。
使用
AFTER_COMMIT
,发出事务的客户端只有在服务器提交到存储引擎并收到副本确认后才会获得返回状态。在提交之后和副本确认之前,其他客户端可以在提交客户端之前看到提交的事务。如果出现问题导致副本无法处理事务,那么在源服务器意外退出并故障转移到副本的情况下,此类客户端可能会看到与他们在源服务器上看到的相关的数据丢失.
此变量仅在安装源端半同步复制插件时可用。
在 MySQL 5.7中添加时
rpl_semi_sync_master_wait_point
,创建了一个版本兼容性约束,因为它增加了半同步接口版本:MySQL 5.7 及更高版本的服务器不使用旧版本的半同步复制插件,也不使用旧版本的服务器使用半同步复制插件对于 MySQL 5.7 及更高版本。-
命令行格式 --rpl-semi-sync-source-enabled[={OFF|ON}]
介绍 8.0.26 系统变量 rpl_semi_sync_source_enabled
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
rpl_semi_sync_source_enabled
rpl_semi_sync_source
在副本上安装了(semisync_source.so
library ) 插件以设置半同步复制 时可用 。如果安装了rpl_semi_sync_master
插件(semisync_master.so
库),rpl_semi_sync_master_enabled
则可用。rpl_semi_sync_source_enabled
控制是否在源服务器上启用半同步复制。要启用或禁用插件,请分别将此变量设置为ON
或OFF
(或 1 或 0)。默认值为OFF
。 -
命令行格式 --rpl-semi-sync-source-timeout=#
介绍 8.0.26 系统变量 rpl_semi_sync_source_timeout
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 10000
最小值 0
最大值 4294967295
单元 毫秒 rpl_semi_sync_source_timeout
rpl_semi_sync_source
在副本上安装了(semisync_source.so
library ) 插件以设置半同步复制 时可用 。如果安装了rpl_semi_sync_master
插件(semisync_master.so
库),rpl_semi_sync_master_timeout
则可用。rpl_semi_sync_source_timeout
控制源在超时和恢复到异步复制之前等待副本确认提交的时间。该值以毫秒为单位指定,默认值为 10000(10 秒)。 rpl_semi_sync_source_trace_level
命令行格式 --rpl-semi-sync-source-trace-level=#
介绍 8.0.26 系统变量 rpl_semi_sync_source_trace_level
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 32
最小值 0
最大值 4294967295
rpl_semi_sync_source_trace_level
rpl_semi_sync_source
在副本上安装了(semisync_source.so
library ) 插件以设置半同步复制 时可用 。如果安装了rpl_semi_sync_master
插件(semisync_master.so
库),rpl_semi_sync_master_trace_level
则可用。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=#
介绍 8.0.26 系统变量 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
library ) 插件以设置半同步复制 时可用 。如果安装了rpl_semi_sync_master
插件(semisync_master.so
库),rpl_semi_sync_master_wait_for_slave_count
则可用。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}]
介绍 8.0.26 系统变量 rpl_semi_sync_source_wait_no_replica
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 ON
rpl_semi_sync_source_wait_no_replica
rpl_semi_sync_source
在副本上安装了(semisync_source.so
library ) 插件以设置半同步复制 时可用 。如果安装了rpl_semi_sync_master
插件(semisync_master.so
库),rpl_semi_sync_source_wait_no_replica
则可用。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
介绍 8.0.26 系统变量 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
library ) 插件以设置半同步复制 时可用 。如果安装了rpl_semi_sync_master
插件(semisync_master.so
库),rpl_semi_sync_master_wait_point
则可用。rpl_semi_sync_source_wait_point
控制半同步复制源服务器在向提交事务的客户端返回状态之前等待事务接收的副本确认的时间点。这些值是允许的:AFTER_SYNC
(默认):源将每个事务写入其二进制日志和副本,并将二进制日志同步到磁盘。同步后,源等待事务接收的副本确认。收到确认后,源将事务提交给存储引擎并将结果返回给客户端,然后客户端可以继续进行。AFTER_COMMIT
:源将每个事务写入其二进制日志和副本,同步二进制日志,并将事务提交给存储引擎。源在提交后等待事务接收的副本确认。收到确认后,源将结果返回给客户端,然后客户端可以继续。
这些设置的复制特征不同如下:
使用
AFTER_SYNC
,所有客户端同时看到提交的事务:在它被副本确认并提交到源上的存储引擎之后。因此,所有客户端都在源上看到相同的数据。在源发生故障的情况下,在源上提交的所有事务都已复制到副本(保存到其中继日志)。源服务器的意外退出和故障转移到副本是无损的,因为副本是最新的。但是请注意,在这种情况下不能重新启动源,必须将其丢弃,因为其二进制日志可能包含未提交的事务,这些事务在二进制日志恢复后外部化时会导致与副本发生冲突。
使用
AFTER_COMMIT
,发出事务的客户端只有在服务器提交到存储引擎并收到副本确认后才会获得返回状态。在提交之后和副本确认之前,其他客户端可以在提交客户端之前看到提交的事务。如果出现问题导致副本无法处理事务,那么在源服务器意外退出并故障转移到副本的情况下,此类客户端可能会看到与他们在源服务器上看到的相关的数据丢失.