本节描述可以在复制源服务器上使用的服务器选项和系统变量。属性上指定选项命令行或者在选择文件.使用指定系统变量值集
.
在源和每个副本上,必须设置server_id
system变量来建立唯一的复制ID。对于每个服务器,您应该在1到2的范围内选择一个唯一的正整数32−1,且每个ID不能与复制拓扑中其他源或副本正在使用的其他ID相同。例子:服务器id = 3
.
有关源代码上用于控制二进制日志记录的选项,请参见第2.6.4节“二进制日志记录选项和变量”.
下面的列表描述了控制复制源服务器的启动选项。本节稍后将讨论与复制相关的系统变量。
-
命令行格式 ——show-replica-auth-info[={|在}]
介绍了 8.0.26 类型 布尔 默认值 从
从MySQL 8.0.26,使用
——show-replica-auth-info
,在MySQL 8.0.26之前使用——show-slave-auth-info
.两种选择的效果是一样的。的输出中显示复制用户名和密码显示副本|显示从主机
属性开始的副本的源上——报告用户
而且——report-password
选项。 -
命令行格式 ——show-slave-auth-info[={|在}]
弃用 8.0.26 类型 布尔 默认值 从
在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
对非整数值产生错误,变量的实际值保持不变。请注意从MySQL 8.0.18开始,设置这个系统变量的会话值不再是一个受限制的操作。
在服务器上启动组复制时,的值
auto_increment_increment
的值更改为group_replication_auto_increment_increment
,默认为7,值为auto_increment_offset
变为服务器ID。当停止组复制时,更改将恢复。这些更改只在以下情况下进行和恢复auto_increment_increment
而且auto_increment_offset
每个都有默认值1。如果已经从默认值修改了这些值,则Group Replication不会更改它们。从MySQL 8.0开始,当Group Replication处于单主模式(只有一台服务器写)时,系统变量也不会被修改。auto_increment_increment
而且auto_increment_offset
影响AUTO_INCREMENT
列行为如下:auto_increment_increment
控制连续列值之间的间隔。例如:mysql>显示'auto_inc%'这样的变量+--------------------------+-------+ | Variable_name |值 | +--------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | +--------------------------+-------+ 2行集(0.00秒)mysql > CREATE TABLE autoinc1 - > (col INT NOT NULL AUTO_INCREMENT主键);mysql> SET @@auto_increment_increment=10mysql>显示变量'auto_inc%';+--------------------------+-------+ | Variable_name |值 | +--------------------------+-------+ | 10 auto_increment_increment | | | auto_increment_offset | 1 | +--------------------------+-------+ 2行集(0.01秒)mysql >插入autoinc1值(空),(零),(零),(零);查询OK, 4 rows affected (0.00 sec) Records: 4 duplicate: 0 warning: 0 mysql> SELECT col FROM autoinc1;+-----+ | 上校 | +-----+ | 21 11 | 1 | | | | | 31 | +-----+ 4行集(0.00秒)
auto_increment_offset
属性的起始点AUTO_INCREMENT
列值。考虑以下情况,假设这些语句在与描述中给出的示例相同的会话中执行auto_increment_increment
:mysql> SET @@auto_increment_offset=5mysql>显示变量'auto_inc%';+--------------------------+-------+ | Variable_name |值 | +--------------------------+-------+ | 10 auto_increment_increment | | | auto_increment_offset | 5 | +--------------------------+-------+ 2行集(0.00秒)mysql > CREATE TABLE autoinc2 - > (col INT NOT NULL AUTO_INCREMENT主键);mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL), (NULL);查询OK, 4 rows affected (0.00 sec) Records: 4 duplicate: 0 warning: 0 mysql> SELECT col FROM autoinc2;+-----+ | 上校 | +-----+ | 25 15 | 5 | | | | | 35 | +-----+ 4行集(0.02秒)
当的值
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>显示'auto_inc%'这样的变量+--------------------------+-------+ | Variable_name |值 | +--------------------------+-------+ | 10 auto_increment_increment | | | auto_increment_offset | 5 | +--------------------------+-------+ 2行(0.00秒)mysql >选择坳autoinc1;+-----+ | 上校 | +-----+ | 21 11 | 1 | | | | | 31 | +-----+ 4行集(0.00秒)mysql >插入autoinc1值(空),(零),(零),(零);查询OK, 4 rows affected (0.00 sec) Records: 4 duplicate: 0 warning: 0 mysql> SELECT col FROM autoinc1;+-----+ | 上校 | +-----+ | 21 11 | 1 | | | | | | 31日35 | | | 45 | | 55 | | 65年 | +-----+ 8行集(0.00秒)
所显示的值
auto_increment_increment
而且auto_increment_offset
生成系列5 +N
× 10,即[5,15,25,35,45,…]。的最大值上校
列之前的插入
的下一个可用值为31AUTO_INCREMENT
级数是35,所以插入的值上校
从这一点开始,结果如所示选择
查询不可能将这两个变量的影响限制在一个表中;这些变量控制所有变量的行为
AUTO_INCREMENT
列所有表在MySQL服务器上。如果设置了任意一个变量的全局值,则其影响将持续到通过设置会话值更改或覆盖全局值,或者直到mysqld重新启动。如果设置了local值,则新值生效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开始,设置这个系统变量的会话值不再是一个受限制的操作。
-
介绍了 8.0.14 系统变量 immediate_server_version
范围 会话 动态 是的 SET_VAR
提示应用没有 类型 整数 供内部复制使用。这个会话系统变量保存了复制拓扑中作为直接源的服务器的MySQL Server发布号(例如,
80014
MySQL 8.0.14服务器实例)。如果这个即时服务器处于不支持会话系统变量的版本中,则该变量的值将被设置为0 (UNKNOWN_SERVER_VERSION
).变量的值从源复制到副本。有了这些信息,副本可以正确地处理来自旧版本源的数据,通过识别所涉及的版本之间发生语法更改或语义更改的位置,并适当地处理这些更改。该信息还可以用于Group Replication环境,其中复制组的一个或多个成员的发布版本比其他成员的发布版本更新。变量的值可以在每个事务的二进制日志中查看(作为
Gtid_log_event
,或Anonymous_gtid_log_event
如果服务器上没有使用gtid),这可能有助于调试跨版本复制问题。设置该系统变量的会话值为受限操作。会话用户必须具有
REPLICATION_APPLIER
特权(见复制权限检查),或足以设置受限制会话变量的特权(请参阅系统变量权限).但是,请注意,该变量不是供用户设置的;它由复制基础设施自动设置。 -
介绍了 8.0.14 系统变量 original_server_version
范围 会话 动态 是的 SET_VAR
提示应用没有 类型 整数 供内部复制使用。这个会话系统变量保存了最初提交事务的服务器的MySQL服务器版本号(例如,
80014
MySQL 8.0.14服务器实例)。如果这个原始服务器处于不支持会话系统变量的版本中,则该变量的值将被设置为0 (UNKNOWN_SERVER_VERSION
).请注意,当原始服务器设置发布号时,如果直接服务器或复制拓扑中的任何其他中间服务器不支持会话系统变量,因此不复制其值,则该变量的值将重置为0。变量的值的设置和使用方法与
immediate_server_version
系统变量。函数的值与变量的值相同immediate_server_version
系统变量,二进制日志中只记录后者,并指示原始服务器版本相同。在Group Replication环境中,查看更改日志事件(当新成员加入该组时,由每个组成员排队的特殊事务)被标记为排队事务的组成员的服务器版本。这确保了加入的成员知道原始捐赠者的服务器版本。由于为特定视图更改排队的视图更改日志事件在所有成员上都具有相同的GTID,因此仅在这种情况下,相同GTID的实例可能具有不同的原始服务器版本。
设置该系统变量的会话值为受限操作。会话用户必须具有
REPLICATION_APPLIER
特权(见复制权限检查),或足以设置受限制会话变量的特权(请参阅系统变量权限).但是,请注意,该变量不是供用户设置的;它由复制基础设施自动设置。 -
命令行格式 ——rpl-semi-sync-master-enabled[={|在}]
系统变量 rpl_semi_sync_master_enabled
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 从
控制源服务器上是否启用半同步复制。要启用或禁用插件,请将此变量设置为
在
或从
(或1或0)。默认为从
.该变量仅在安装源端半同步复制插件时可用。
-
命令行格式 ——rpl-semi-sync-master-timeout = #
系统变量 rpl_semi_sync_master_timeout
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 10000
一个以毫秒为单位的值,控制源在超时并恢复到异步复制之前等待副本确认提交的时间。缺省值是10000(10秒)。
该变量仅在安装源端半同步复制插件时可用。
rpl_semi_sync_master_trace_level
命令行格式 ——rpl-semi-sync-master-trace-level = #
系统变量 rpl_semi_sync_master_trace_level
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 32
源服务器上的半同步复制调试跟踪级别。定义了四个级别:
1 =一般级别(如时间功能故障)
16 = detail level(更详细的信息)
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
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 在
控制源是否等待配置的超时时间
rpl_semi_sync_master_timeout
将过期,即使副本计数下降到小于配置的副本数量rpl_semi_sync_master_wait_for_slave_count
超时时间。当的值
rpl_semi_sync_master_wait_no_slave
是在
(默认值),允许副本计数下降到小于rpl_semi_sync_master_wait_for_slave_count
超时时间。只要在超时时间到期之前有足够多的副本确认事务,半同步复制就会继续进行。当的值
rpl_semi_sync_master_wait_no_slave
是从
,如果副本计数下降到小于中配置的数量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 =值
系统变量 rpl_semi_sync_master_wait_point
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 枚举 默认值 AFTER_SYNC
有效值 AFTER_SYNC
AFTER_COMMIT
此变量控制半同步复制源服务器在向提交事务的客户端返回状态之前等待事务接收的副本确认的时间点。这些值是允许的:
AFTER_SYNC
(默认值):源将每个事务写入其二进制日志和副本,并将二进制日志同步到磁盘。源在同步之后等待事务接收的副本确认。在收到确认后,源将事务提交到存储引擎,并将结果返回给客户端,然后客户端可以继续进行。AFTER_COMMIT
:源将每个事务写入其二进制日志和副本,同步二进制日志,并将事务提交给存储引擎。在提交之后,源等待事务接收的副本确认。在收到确认后,源将结果返回给客户端,然后客户端可以继续。
这些设置的复制特性如下所示:
与
AFTER_SYNC
,所有客户端同时看到已提交的事务:在它被副本确认并提交给源上的存储引擎之后。因此,所有客户端在源上看到相同的数据。在源故障的情况下,源上提交的所有事务都被复制到副本(保存到其中继日志中)。源服务器的意外退出和故障转移到副本是无损的,因为副本是最新的。但是请注意,在此场景中不能重新启动源,必须丢弃源,因为它的二进制日志可能包含未提交的事务,这些事务在二进制日志恢复后外部化时会与副本发生冲突。
与
AFTER_COMMIT
,发出事务的客户端只有在服务器提交到存储引擎并接收到副本确认后才能获得返回状态。在提交之后和副本确认之前,其他客户端可以在提交客户端之前看到已提交的事务。如果出现错误,副本不能处理事务,那么在意外的源服务器退出和故障转移到副本的情况下,这样的客户端可能会看到相对于它们在源上看到的数据丢失。
该变量仅在安装源端半同步复制插件时可用。
加上
rpl_semi_sync_master_wait_point
在MySQL 5.7中,创建了一个版本兼容性约束,因为它增加了半同步接口版本:MySQL 5.7及以上版本的服务器不能使用旧版本的半同步复制插件,旧版本的服务器也不能使用MySQL 5.7及以上版本的半同步复制插件。-
命令行格式 ——rpl-semi-sync-source-enabled[={|在}]
介绍了 8.0.26 系统变量 rpl_semi_sync_source_enabled
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 从
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
控制源服务器上是否启用半同步复制。要启用或禁用插件,请将此变量设置为在
或从
(或1或0)。默认为从
. -
命令行格式 ——rpl-semi-sync-source-timeout = #
介绍了 8.0.26 系统变量 rpl_semi_sync_source_timeout
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 10000
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
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 = detail level(更详细的信息)
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[={|在}]
介绍了 8.0.26 系统变量 rpl_semi_sync_source_wait_no_replica
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 在
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
是在
(默认值),允许副本计数下降到小于rpl_semi_sync_source_wait_for_replica_count
超时时间。只要在超时时间到期之前有足够多的副本确认事务,半同步复制就会继续进行。当的值
rpl_semi_sync_source_wait_no_replica
是从
,如果副本计数下降到小于中配置的数量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 =值
介绍了 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
,发出事务的客户端只有在服务器提交到存储引擎并接收到副本确认后才能获得返回状态。在提交之后和副本确认之前,其他客户端可以在提交客户端之前看到已提交的事务。如果出现错误,副本不能处理事务,那么在意外的源服务器退出和故障转移到副本的情况下,这样的客户端可能会看到相对于它们在源上看到的数据丢失。