复制从站选项和变量
本节说明适用于从属复制服务器的服务器选项和系统变量,并包含以下内容:
- 复制从站的启动选项
- 从站状态记录到表的选项
- 复制从站上使用的系统变量
在命令行或选项文件中指定选项。可以使用以下CHANGE MASTER TO
语句在服务器运行时设置许多选项。使用指定系统变量值SET
。
服务器ID。在主服务器和每个从属服务器上,必须设置server_id
系统变量以在1到2 32 − 1 的范围内建立唯一的复制ID 。“ Unique ”表示每个ID必须与其他任何复制使用的其他ID都不同。主或从。示例my.cnf
文件:
[mysqld] server-id=3
复制从站的启动选项
本节说明用于控制复制从属服务器的启动选项。在服务器运行时,可以使用以下CHANGE MASTER TO
语句设置许多这些选项。其他(例如--replicate-*
选项)只能在从属服务器启动时进行设置。与复制相关的系统变量将在本节后面讨论。
--master-info-file=file_name
属性 值 命令行格式 --master-info-file=file_name 不推荐使用 8.0.18 类型 文件名 默认值 master.info 主信息日志的名称(如果
master_info_repository=FILE
已设置)。默认名称master.info
在数据目录中。--master-info-file
和设置master_info_repository=FILE
已弃用,因为崩溃安全从属表已取代对主信息日志的文件使用。有关主信息日志的信息,请参见“从站状态日志”。--master-retry-count=count
属性 值 命令行格式 --master-retry-count=# 不推荐使用 是 类型 整数 默认值 86400 最低值 0 最大值(64位平台) 18446744073709551615 最大值(32位平台) 4294967295 从站放弃之前尝试重新连接到主站的次数。默认值为86400次。值0表示“ infinite ”,并且从站尝试永久连接。当从属服务器达到其连接超时(由
slave_net_timeout
系统变量指定)而未从主机接收数据或心跳信号时,将触发重新连接尝试。尝试以语句MASTER_CONNECT_RETRY
选项设置的间隔尝试重新连接CHANGE MASTER TO
(默认为每60秒)。该选项已被弃用,并将在以后的MySQL版本中删除。使用语句的
MASTER_RETRY_COUNT
选项CHANGE MASTER TO
代替。--max-relay-log-size=size
属性 值 命令行格式 --max-relay-log-size=# 系统变量 max_relay_log_size 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 0 最低值 0 最大值 1073741824 服务器自动旋转中继日志文件的大小。如果该值不为零,则继电器日志的大小超过该值时,它将自动旋转。如果该值为零(默认值),则继电器日志旋转发生的大小由的值确定
max_binlog_size
。有关更多信息,请参见“从站中继日志”。--relay-log-purge={0|1}
属性 值 命令行格式 --relay-log-purge[={OFF|ON}] 系统变量 relay_log_purge 范围 Global 动态 是 SET_VAR
提示适用没有 类型 布尔型 默认值 ON 不再需要中继日志时,请禁用或启用它们的自动清除。默认值为1(启用)。这是一个全局变量,可以使用进行动态更改。启用选件时,禁用中继日志的清除会导致数据一致性,因此并不安全。
SET GLOBAL relay_log_purge =N
--relay-log-recovery
--relay-log-space-limit=size
属性 值 命令行格式 --relay-log-space-limit=# 系统变量 relay_log_space_limit 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 整数 默认值 0 最低值 0 最大值(64位平台) 18446744073709551615 最大值(32位平台) 4294967295 此选项对从站上所有中继日志的总大小(以字节为单位)设置上限。值0表示“无限制”。这对于磁盘空间有限的从属服务器主机很有用。达到限制后,I / O线程将停止从主服务器读取二进制日志事件,直到SQL线程赶上并删除一些未使用的中继日志。请注意,此限制不是绝对的:在某些情况下,SQL线程需要更多事件才能删除中继日志。在那种情况下,I / O线程会超出限制,直到SQL线程有可能删除一些中继日志为止,因为不这样做会导致死锁。你不应该设置
--relay-log-space-limit
到小于两倍的值--max-relay-log-size
(或者--max-binlog-size
如果--max-relay-log-size
是0)。在这种情况下,I / O线程有可能因为--relay-log-space-limit
超出了空间而等待可用空间,但是SQL线程没有要清除的中继日志,因此无法满足I / O线程。这将强制I / O线程--relay-log-space-limit
暂时忽略。--replicate-do-db=db_name
属性 值 命令行格式 --replicate-do-db=name 类型 string 使用数据库名称创建复制过滤器。也可以使用创建此类过滤器
CHANGE REPLICATION FILTER REPLICATE_DO_DB
。此选项支持通道特定的复制筛选器,从而使多源复制从属可以将特定的筛选器用于不同的源。要在名为
channel_1
use 的通道上配置特定于通道的复制筛选器。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是文字冒号。有关更多信息,请参见“基于复制通道的过滤器”。--replicate-do-db:channel_1:db_name
注意
全局复制筛选器不能在配置用于组复制的MySQL服务器实例上使用,因为在某些服务器上筛选事务将使组无法就一致状态达成协议。特定于通道的复制筛选器可用于与组复制不直接相关的复制通道,例如,组成员还充当组外主服务器的复制从属。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。此复制筛选器的确切效果取决于是否使用基于语句的复制或基于行的复制。
基于语句的复制。告诉从SQL线程限制复制到报表,其中默认的数据库(即,由选定的一个
USE
)是db_name
。要指定多个数据库,请多次使用此选项,每个数据库一次;但是,这样做不会复制跨数据库语句,例如在选择其他数据库(或未选择数据库)的情况下。UPDATE some_db.some_table SET foo='bar'
警告
要指定多个数据库,您必须使用此选项的多个实例。因为数据库名称可以包含逗号,所以如果提供逗号分隔的列表,则该列表将被视为单个数据库的名称。
一个使用基于语句的复制时可能无法正常工作的示例:如果从属服务器启动
--replicate-do-db=sales
并在主服务器上发出以下语句,则该UPDATE
语句不会被复制:USE prices;UPDATE sales.januarySET amount=amount+1000;这种“仅检查默认数据库”行为的主要原因是,仅凭语句很难知道是否应复制它(例如,如果您使用的是多表
DELETE
语句或UPDATE
跨多个表起作用的多表语句)数据库)。如果不需要,仅检查默认数据库而不是所有数据库也更快。基于行的复制。告诉从SQL线程将复制限制到数据库
db_name
。仅属于的表db_name
被更改;当前数据库对此没有影响。假设从属服务器开始--replicate-do-db=sales
并且基于行的复制生效,然后在主服务器上运行以下语句:USE prices;UPDATE sales.februarySET amount=amount+100;从站上
february
的sales
数据库中的表根据该UPDATE
语句进行更改;无论是否USE
发出声明,都会发生这种情况。但是,在使用基于行的复制和时,在主服务器上发出以下语句对从服务器没有影响--replicate-do-db=sales
:USE prices;UPDATE prices.marchSET amount=amount-25;即使将语句
USE prices
更改为USE sales
,该UPDATE
语句的效果仍然不会被复制。--replicate-do-db
与引用基于行的复制相比,基于语句的复制在处理方式上的另一个重要区别在于引用多个数据库的语句。假设从站以开头--replicate-do-db=db1
,并且以下语句在主站上执行:USE db1;UPDATE db1.table1SET col1 = 10, db2.table2SET col2 = 20;如果使用的是基于语句的复制,则两个表都将在从属服务器上更新。但是,使用基于行的复制时,仅
table1
在从属服务器上受到影响;由于table2
位于不同的数据库中,table2
因此从属服务器上的不会被更改UPDATE
。现在,假设已使用USE db1
一条USE db4
语句代替该语句:USE db4;UPDATE db1.table1SET col1 = 10, db2.table2SET col2 = 20;在这种情况下,
UPDATE
使用基于语句的复制时,该语句对从属服务器无效。但是,如果您使用的是基于行的复制,UPDATE
则将table1
在从属服务器上更改,而不会更改table2
-换句话说,仅--replicate-do-db
更改由数据库命名的表,并且默认数据库的选择对此行为没有影响。如果需要跨数据库更新才能工作,请改用。请参见“服务器如何评估复制过滤规则”。
--replicate-wild-do-table=db_name.%
注意
此选项以与
--binlog-do-db
影响二进制日志记录相同的方式影响复制,复制格式对--replicate-do-db
复制行为的影响与日志记录格式对行为的影响相同--binlog-do-db
。此选项没有影响
BEGIN
,COMMIT
或者ROLLBACK
语句。--replicate-ignore-db=db_name
属性 值 命令行格式 --replicate-ignore-db=name 类型 string 使用数据库名称创建复制过滤器。也可以使用创建此类过滤器
CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB
。此选项支持通道特定的复制筛选器,从而使多源复制从属可以将特定的筛选器用于不同的源。要在名为
channel_1
use 的通道上配置特定于通道的复制筛选器。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是文字冒号。有关更多信息,请参见“基于复制通道的过滤器”。--replicate-ignore-db:channel_1:db_name
注意
全局复制筛选器不能在配置用于组复制的MySQL服务器实例上使用,因为在某些服务器上筛选事务将使组无法就一致状态达成协议。特定于通道的复制筛选器可用于与组复制不直接相关的复制通道,例如,组成员还充当组外主服务器的复制从属。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。要指定多个要忽略的数据库,请多次使用此选项,每个数据库一次。因为数据库名称可以包含逗号,所以如果您提供用逗号分隔的列表,则该列表将被视为单个数据库的名称。
与一样
--replicate-do-db
,此过滤的确切效果取决于是否使用基于语句的复制或基于行的复制,并将在接下来的几段中进行介绍。基于语句的复制。告诉slave SQL线程不会复制任何声明,其中默认数据库(也就是一个由选定的
USE
)是db_name
。基于行的复制。告诉从SQL线程不要更新数据库中的任何表
db_name
。默认数据库无效。当使用基于语句的复制时,以下示例无法正常工作。假设从属服务器启动,
--replicate-ignore-db=sales
并且您在主服务器上发出以下语句:USE prices;UPDATE sales.januarySET amount=amount+1000;在这种情况下,该
UPDATE
语句将被复制,因为它--replicate-ignore-db
仅适用于默认数据库(由该USE
语句确定)。因为sales
在该语句中显式指定了数据库,所以该语句尚未过滤。但是,在使用基于行的复制时,该UPDATE
语句的效果不会传播到从属服务器,并且从属服务器的sales.january
表副本不变。在这种情况下,--replicate-ignore-db=sales
导致对主副本的表中的表进行的所有更改sales
从数据库将忽略该数据库。如果您正在使用跨数据库更新,并且您不希望复制这些更新,则不应使用此选项。请参见“服务器如何评估复制过滤规则”。
如果需要跨数据库更新才能工作,请改用。请参见“服务器如何评估复制过滤规则”。
--replicate-wild-ignore-table=db_name.%
注意
此选项以与
--binlog-ignore-db
影响二进制日志记录相同的方式影响复制,复制格式对--replicate-ignore-db
复制行为的影响与日志记录格式对行为的影响相同--binlog-ignore-db
。此选项没有影响
BEGIN
,COMMIT
或者ROLLBACK
语句。--replicate-do-table=db_name.tbl_name
属性 值 命令行格式 --replicate-do-table=name 类型 string 通过告诉从SQL线程将复制限制到给定表来创建复制筛选器。要指定多个表,请多次使用此选项,每个表一次。与相比,这适用于跨数据库更新和默认数据库更新
--replicate-do-db
。请参见“服务器如何评估复制过滤规则”。您也可以通过发出CHANGE REPLICATION FILTER REPLICATE_DO_TABLE
语句来创建此类过滤器。此选项支持通道特定的复制筛选器,从而使多源复制从属可以将特定的筛选器用于不同的源。要在名为
channel_1
use 的通道上配置特定于通道的复制筛选器。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是文字冒号。有关更多信息,请参见“基于复制通道的过滤器”。--replicate-do-table:channel_1:db_name.tbl_name
注意
全局复制筛选器不能在配置用于组复制的MySQL服务器实例上使用,因为在某些服务器上筛选事务将使组无法就一致状态达成协议。特定于通道的复制筛选器可用于与组复制不直接相关的复制通道,例如,组成员还充当组外主服务器的复制从属。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。此选项仅影响适用于表的语句。它不会影响仅适用于其他数据库对象的语句,例如存储的例程。要过滤对存储的例程进行操作的语句,请使用一个或多个
--replicate-*-db
选项。--replicate-ignore-table=db_name.tbl_name
属性 值 命令行格式 --replicate-ignore-table=name 类型 string 通过告诉从SQL线程不要复制任何更新指定表的语句来创建复制过滤器,即使同一表可能会更新其他表。要指定多个要忽略的表,请多次使用此选项,每个表一次。与相比,这适用于跨数据库更新
--replicate-ignore-db
。请参见“服务器如何评估复制过滤规则”。您也可以通过发出CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE
语句来创建此类过滤器。此选项支持通道特定的复制筛选器,从而使多源复制从属可以将特定的筛选器用于不同的源。要在名为
channel_1
use 的通道上配置特定于通道的复制筛选器。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是文字冒号。有关更多信息,请参见“基于复制通道的过滤器”。--replicate-ignore-table:channel_1:db_name.tbl_name
注意
全局复制筛选器不能在配置用于组复制的MySQL服务器实例上使用,因为在某些服务器上筛选事务将使组无法就一致状态达成协议。特定于通道的复制筛选器可用于与组复制不直接相关的复制通道,例如,组成员还充当组外主服务器的复制从属。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。此选项仅影响适用于表的语句。它不会影响仅适用于其他数据库对象的语句,例如存储的例程。要过滤对存储的例程进行操作的语句,请使用一个或多个
--replicate-*-db
选项。--replicate-rewrite-db=from_name->to_name
属性 值 命令行格式 --replicate-rewrite-db=old_name->new_name 类型 string 告诉从创建转换的默认数据库复制过滤器(即,一个由选定的
USE
),以to_name
如果它是from_name
在主。只有涉及表语句将受到影响(没有语句,例如CREATE DATABASE
,DROP DATABASE
和ALTER DATABASE
),且仅当from_name
是主服务器上的默认数据库。要指定多个重写,请多次使用此选项。服务器使用第一个具有from_name
匹配值的服务器。该数据库名翻译完成之前的--replicate-*
规则经过测试。您也可以通过发出CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB
语句来创建此类过滤器。如果在命令行上使用此选项,并且该
>
字符对于命令解释器来说是特殊的,请引用该选项的值。例如:shell>
mysqld --replicate-rewrite-db="olddb->newdb"此选项支持通道特定的复制筛选器,从而使多源复制从属可以将特定的筛选器用于不同的源。指定通道名称,后跟冒号,再指定过滤器规范。第一个冒号被解释为分隔符,所有后续的冒号都被解释为文字冒号。例如,要在名为的通道上配置特定于通道的复制过滤器
channel_1
,请使用:shell>
mysqld --replicate-rewrite-db=channel_1:db_name1->db_name2如果使用冒号但未指定通道名称,则该选项将配置复制筛选器作为默认复制通道。有关更多信息,请参见“基于复制通道的过滤器”。
注意
全局复制筛选器不能在配置用于组复制的MySQL服务器实例上使用,因为在某些服务器上筛选事务将使组无法就一致状态达成协议。特定于通道的复制筛选器可用于与组复制不直接相关的复制通道,例如,组成员还充当组外主服务器的复制从属。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。使用此选项时,其中表名使用数据库名限定的语句不适用于表级复制过滤选项,例如
--replicate-do-table
。假设我们有一个a
在主服务器上命名的数据库,一个b
在从服务器上命名的数据库,每个数据库都包含一个表t
,并使用来启动了主数据库--replicate-rewrite-db='a->b'
。在稍后的时间,我们执行DELETE FROM a.t
。在这种情况下,由于以下原因,没有相关的过滤规则起作用:--replicate-do-table=a.t
不起作用,因为从属t
数据库中有表b
。--replicate-do-table=b.t
与原始语句不匹配,因此将被忽略。--replicate-do-table=*.t
的处理方式与相同--replicate-do-table=a.t
,因此也不起作用。
同样,该
--replication-rewrite-db
选项不适用于跨数据库更新。--replicate-same-server-id
属性 值 命令行格式 --replicate-same-server-id[={OFF|ON}] 类型 布尔型 默认值 OFF 此选项用于复制从站。默认值为0(
FALSE
)。如果将此选项设置为1(TRUE
),则从属服务器不会跳过具有其自己的服务器ID的事件。此设置通常仅在很少的配置中有用。在复制从属服务器上启用二进制日志记录后,如果服务器是循环复制拓扑的一部分,则从属服务器上的
--replicate-same-server-id
和--log-slave-updates
选项的组合可能会导致复制无限循环。(在MySQL 8.0中,默认情况下启用二进制日志记录,而在启用二进制日志记录时默认为从属更新日志记录。)但是,全局事务标识符(GTID)的使用通过跳过已经执行的事务的执行来避免这种情况。应用。如果gtid_mode=ON
如果在从属服务器上设置了“ I / O”,则可以使用此选项组合启动服务器,但是在服务器运行时不能更改为任何其他GTID模式。如果设置了其他任何GTID模式,则服务器不会以此选项组合启动。默认情况下,如果从属I / O线程具有从属服务器的ID,则不会将二进制日志事件写入中继日志(此优化有助于节省磁盘使用量)。如果要使用
--replicate-same-server-id
,请确保在使用此选项启动从属服务器之前,先让该从属服务器读取您自己的事件,该事件需要您执行从属SQL线程。--replicate-wild-do-table=db_name.tbl_name
属性 值 命令行格式 --replicate-wild-do-table=name 类型 string 通过告诉从线程将复制限制为其中任何更新的表与指定的数据库和表名称模式匹配的语句,从而创建复制筛选器。模式可以包含
%
和_
通配符,其含义与LIKE
模式匹配运算符相同。要指定多个表,请多次使用此选项,每个表一次。这适用于跨数据库更新。请参见“服务器如何评估复制过滤规则”。您也可以通过发出CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE
语句来创建此类过滤器。此选项支持通道特定的复制筛选器,从而使多源复制从属可以将特定的筛选器用于不同的源。要在名为
channel_1
use 的通道上配置特定于通道的复制筛选器。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是文字冒号。有关更多信息,请参见“基于复制通道的过滤器”。--replicate-wild-do-table:channel_1:db_name.tbl_name
注意
全局复制筛选器不能在配置用于组复制的MySQL服务器实例上使用,因为在某些服务器上筛选事务将使组无法就一致状态达成协议。特定于通道的复制筛选器可用于与组复制不直接相关的复制通道,例如,组成员还充当组外主服务器的复制从属。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。此选项适用于表,视图和触发器。它不适用于存储过程和功能或事件。要过滤对后一个对象操作的语句,请使用一个或多个
--replicate-*-db
选项。例如,
--replicate-wild-do-table=foo%.bar%
仅复制使用表的更新,该表的数据库名称以开头,foo
表名称以开头bar
。如果表名称模式
%
,它匹配任何表名和选项也适用于数据库级的语句(CREATE DATABASE
,DROP DATABASE
,和ALTER DATABASE
)。例如,如果使用--replicate-wild-do-table=foo%.%
,则在数据库名称与pattern匹配时复制数据库级语句foo%
。要在数据库或表名称模式中包括文字通配符,请使用反斜杠对其进行转义。例如,要复制一个名为的数据库的所有表
my_own%db
,但不从该my1ownAABCdb
数据库复制表,则应转义_
和%
字符,例如:--replicate-wild-do-table=my\_own\%db
。如果在命令行上使用选项,则可能需要加倍反斜杠或引用选项值,具体取决于命令解释器。例如,对于bash shell,您需要输入--replicate-wild-do-table=my\\_own\\%db
。--replicate-wild-ignore-table=db_name.tbl_name
属性 值 命令行格式 --replicate-wild-ignore-table=name 类型 string 创建一个复制过滤器,以防止从属线程复制任何表与给定通配符模式匹配的语句。要指定多个要忽略的表,请多次使用此选项,每个表一次。这适用于跨数据库更新。请参见“服务器如何评估复制过滤规则”。您也可以通过发出
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE
语句来创建此类过滤器。此选项支持通道特定的复制筛选器,从而使多源复制从属可以将特定的筛选器用于不同的源。要在名为
channel_1
use 的通道上配置特定于通道的复制筛选器。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是文字冒号。有关更多信息,请参见“基于复制通道的过滤器”。--replicate-wild-ignore:channel_1:db_name.tbl_name
注意
全局复制筛选器不能在配置用于组复制的MySQL服务器实例上使用,因为在某些服务器上筛选事务将使组无法就一致状态达成协议。特定于通道的复制筛选器可用于与组复制不直接相关的复制通道,例如,组成员还充当组外主服务器的复制从属。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。例如,
--replicate-wild-ignore-table=foo%.bar%
不复制使用数据库名称以开头foo
且表名称以开头的表的更新bar
。有关匹配如何工作的信息,请参阅--replicate-wild-do-table
选项说明。在选项值中包括文字通配符的规则也与之相同--replicate-wild-ignore-table
。--skip-slave-start
属性 值 命令行格式 --skip-slave-start[={OFF|ON}] 类型 布尔型 默认值 OFF 指示从属服务器在服务器启动时不要启动从属线程。要稍后启动线程,请使用一条
START SLAVE
语句。--slave-skip-errors=[err_code1,err_code2,...|all|ddl_exist_errors]
属性 值 命令行格式 --slave-skip-errors=name 系统变量 slave_skip_errors 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 string 默认值 OFF 有效值 OFF
[list of error codes]
all
ddl_exist_errors
通常,当从属服务器发生错误时,复制会停止,这使您有机会手动解决数据中的不一致问题。当语句返回选项值中列出的任何错误时,此选项会使从属SQL线程继续复制。
除非您完全理解为什么会出错,否则不要使用此选项。如果复制设置和客户端程序中没有错误,而MySQL本身也没有错误,则永远不会发生停止复制的错误。不加选择地使用此选项会导致从属设备变得与主设备失去同步,而您不知道为什么会发生这种情况。
对于错误代码,应在从站错误日志和的输出中使用错误消息提供的编号
SHOW SLAVE STATUS
。附录B,“错误,错误代码和常见问题”,列出了服务器错误代码。速记值
ddl_exist_errors
等效于错误代码列表1007,1008,1050,1051,1054,1060,1061,1068,1094,1146
。您也可以(但不应)使用非常不推荐的值
all
导致从属设备忽略所有错误消息,并且无论发生什么都会继续运行。不用说,如果使用all
,就不能保证数据的完整性。在这种情况下,如果从站的数据与主站的数据不一致,请不要抱怨(或提交错误报告)。您已被警告。例子:
--slave-skip-errors=1062,1053 --slave-skip-errors=all --slave-skip-errors=ddl_exist_errors
--slave-sql-verify-checksum={0|1}
属性 值 命令行格式 --slave-sql-verify-checksum[={OFF|ON}] 类型 布尔型 默认值 ON 启用此选项后,从站将检查从中继日志中读取的校验和,如果不匹配,则从站会因错误而停止。
MySQL测试套件在内部使用以下选项进行复制测试和调试。它们不适用于生产环境。
--abort-slave-event-count
属性 值 命令行格式 --abort-slave-event-count=# 类型 整数 默认值 0 最低值 0 当将此选项设置为
value
0(默认值)以外的某个正整数时,它将影响复制行为,如下所示:从属SQL线程启动后,value
允许执行日志事件;否则,将执行日志事件。此后,从SQL线程不再接收任何事件,就像断开了来自主服务器的网络连接一样。从属线程继续运行,并且在和列中都SHOW SLAVE STATUS
显示了输出,但没有从中继日志中读取其他事件。Yes
Slave_IO_Running
Slave_SQL_Running
--disconnect-slave-event-count
属性 值 命令行格式 --disconnect-slave-event-count=# 类型 整数 默认值 0
从站状态记录到表的选项
复制从属状态信息记录到mysql
数据库中的InnoDB表中。在MySQL 8.0之前,也可以将此信息记录到数据目录中的文件中,但是现在不赞成使用该格式。可以使用以下两个系统变量分别配置主信息日志和中继日志信息日志的写入:
master_info_repository
relay_log_info_repository
有关这些变量的信息,请参见“复制从站选项和变量”。
从属状态日志表及其内容被认为是给定MySQL服务器本地的。它们不会被复制,对它们的更改也不会写入二进制日志。
有关更多信息,请参见“复制中继和状态日志”。
复制从站上使用的系统变量
下表描述了用于控制复制从属服务器的系统变量。可以在服务器启动时设置它们,其中一些可以在运行时使用进行更改SET
。本节前面列出了与复制从属服务器一起使用的服务器选项。
init_slave
属性 值 命令行格式 --init-slave=name 系统变量 init_slave 范围 Global 动态 是 SET_VAR
提示适用没有 类型 string 该变量与相似
init_connect
,但是是一个字符串,每次SQL线程启动时由从属服务器执行。字符串的格式与init_connect
变量的格式相同。此变量的设置对后续START SLAVE
语句生效。注意
SQL线程在执行之前将确认发送给客户端
init_slave
。因此,不能保证返回init_slave
时已执行START SLAVE
。有关更多信息,请参见“ START SLAVE语句”。log_slow_slave_statements
属性 值 命令行格式 --log-slow-slave-statements[={OFF|ON}] 系统变量 log_slow_slave_statements 范围 Global 动态 是 SET_VAR
提示适用没有 类型 布尔型 默认值 OFF 启用慢速查询日志后,此变量将启用日志记录,以记录
long_query_time
在从属服务器上执行了超过几秒钟的查询。请注意,如果正在使用基于行的复制(binlog_format=ROW
),log_slow_slave_statements
则无效。查询仅在二进制日志中以语句格式记录时,即binlog_format=STATEMENT
设置时或binlog_format=MIXED
设置时以及以语句格式记录时,才添加到从属的慢速查询日志中。设置为时以行格式记录的慢查询binlog_format=MIXED
,或设置为时记录的慢查询binlog_format=ROW
设置后,即使log_slow_slave_statements
已启用,也不会添加到从站的慢速查询日志中。设置
log_slow_slave_statements
没有立即生效。变量的状态适用于所有后续START SLAVE
语句。另请注意,的全局设置long_query_time
适用于SQL线程的生存期。如果更改了设置,您必须停止并重新启动从服务器的SQL线程存在(例如,通过发布实施变更STOP SLAVE
,并START SLAVE
与报表SQL_THREAD
选项)。master_info_repository
属性 值 命令行格式 --master-info-repository={FILE|TABLE} 系统变量 master_info_repository 范围 Global 动态 是 SET_VAR
提示适用没有 类型 string 默认值 TABLE 有效值 FILE
TABLE
此变量的设置确定从属服务器是将主服务器状态和连接信息记录到系统数据库中的
InnoDB
表mysql
还是数据目录中的文件中。默认设置为
TABLE
。作为一个InnoDB
表,主信息日志名为mysql.slave_master_info
。TABLE
当配置了多个复制通道时,此设置是必需的。该
FILE
设置已弃用,并将在以后的版本中删除。作为文件,master.info
默认情况下命名主信息日志。您可以使用--master-info-file
选项更改此名称。从站状态日志位置的设置直接影响
sync_master_info
系统变量设置的影响。仅当没有执行复制线程时,才可以更改设置。max_relay_log_size
属性 值 命令行格式 --max-relay-log-size=# 系统变量 max_relay_log_size 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 0 最低值 0 最大值 1073741824 如果复制从属对其中继日志的写操作导致当前日志文件大小超过此变量的值,则从属将旋转中继日志(关闭当前文件并打开下一个文件)。如果
max_relay_log_size
为0,则服务器同时使用max_binlog_size
二进制日志和中继日志。如果max_relay_log_size
大于0,则将限制中继日志的大小,这使您可以为两个日志设置不同的大小。您必须将其设置max_relay_log_size
为4096字节至1GB(含)之间,或设置为0。默认值为0。请参见“复制实现细节”。relay_log
属性 值 命令行格式 --relay-log=file_name 系统变量 relay_log 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 文件名 中继日志文件的基本名称。对于默认复制通道,中继日志的默认基本名称为
host_name-relay-bin
。对于非默认复制通道,中继日志的默认基本名称为,其中是此中继日志中记录的复制通道的名称。host_name-relay-bin-channel
channel
服务器将文件写入数据目录中,除非给基本名称提供前导的绝对路径名以指定其他目录。服务器通过在基本名称中添加数字后缀来依次创建中继日志文件。
复制服务器上的中继日志和中继日志索引不能与二进制日志和二进制日志索引使用相同的名称,后者的名称由
--log-bin
和--log-bin-index
选项指定。如果二进制日志和中继日志文件的基本名称相同,服务器将发出错误消息,并且不会启动。由于MySQL解析服务器选项的方式,如果在服务器启动时指定此变量,则必须提供一个值。仅当未实际指定选项时,才使用默认基本名称。如果
relay_log
在服务器启动时指定系统变量而未指定值,则可能会导致意外行为;否则,可能会导致意外行为。此行为取决于所使用的其他选项,指定它们的顺序以及是否在命令行或选项文件中指定它们。有关MySQL如何处理服务器选项的更多信息,请参见“指定程序选项”。如果指定此变量,则指定的值还将用作中继日志索引文件的基本名称。您可以通过使用
relay_log_index
系统变量指定其他中继日志索引文件基本名称来覆盖此行为。服务器从索引文件读取条目时,将检查条目是否包含相对路径。如果是这样,则将路径的相对部分替换为使用
relay_log
系统变量设置的绝对路径。绝对路径保持不变;在这种情况下,必须手动编辑索引以启用新路径。您可能会发现
relay_log
系统变量对于执行以下任务很有用:- 创建名称独立于主机名的中继日志。
- 如果您需要将中继日志放置在数据目录之外的其他区域,因为您的中继日志往往很大,并且您不想减少中继日志
max_relay_log_size
。 - 通过使用磁盘之间的负载平衡来提高速度。
您可以从
relay_log_basename
系统变量获取中继日志文件名(和路径)。relay_log_basename
属性 值 系统变量 relay_log_basename 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 文件名 默认值 datadir +'/'+ hostname +'-relay-bin' 保留中继日志文件的名称和完整路径。该变量由服务器设置,并且是只读的。
relay_log_index
属性 值 命令行格式 --relay-log-index=file_name 系统变量 relay_log_index 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 文件名 默认值 *host_name*-relay-bin.index 中继日志索引文件的名称。如果未指定此变量,但指定了
relay_log
系统变量,则将其值用作中继日志索引文件的默认基本名称。如果relay_log
也未指定,则对于默认复制通道,默认名称为host_name-relay-bin.index
,使用主机名。对于非默认复制通道,默认名称为,其中是此中继日志索引中记录的复制通道的名称。host_name-relay-bin-channel.index
channel
中继日志文件的默认位置是数据目录,或使用
relay_log
系统变量指定的任何其他位置。您可以使用relay_log_index
系统变量来指定替代位置,方法是在基础名称中添加前导绝对路径名以指定其他目录。复制服务器上的中继日志和中继日志索引不能与二进制日志和二进制日志索引使用相同的名称,后者的名称由
--log-bin
和--log-bin-index
选项指定。如果二进制日志和中继日志文件的基本名称相同,服务器将发出错误消息,并且不会启动。由于MySQL解析服务器选项的方式,如果在服务器启动时指定此变量,则必须提供一个值。仅当未实际指定选项时,才使用默认基本名称。如果
relay_log_index
在服务器启动时指定系统变量而未指定值,则可能会导致意外行为;否则,可能会导致意外行为。此行为取决于所使用的其他选项,指定它们的顺序以及是否在命令行或选项文件中指定它们。有关MySQL如何处理服务器选项的更多信息,请参见“指定程序选项”。relay_log_info_file
属性 值 命令行格式 --relay-log-info-file=file_name 不推荐使用 8.0.18 系统变量 relay_log_info_file 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 文件名 默认值 relay-log.info 从站记录有关中继日志信息的文件的名称,格式为
relay_log_info_repository=FILE
。如果为relay_log_info_repository=TABLE
,则是在将存储库更改为时使用的文件名FILE
。默认名称relay-log.info
在数据目录中。relay_log_info_file
和设置relay_log_info_repository=FILE
已弃用,因为碰撞安全从表已取代中继日志信息日志文件的使用。有关中继日志信息日志的信息,请参见“从站状态日志”。relay_log_info_repository
属性 值 命令行格式 --relay-log-info-repository=value 系统变量 relay_log_info_repository 范围 Global 动态 是 SET_VAR
提示适用没有 类型 string 默认值 TABLE 有效值 FILE
TABLE
此变量的设置确定从属服务器是否将其在中继日志中的位置记录到系统数据库中的
InnoDB
表mysql
还是数据目录中的文件中。默认设置为
TABLE
。作为一个InnoDB
表,中继日志信息的日志被命名mysql.slave_relay_log_info
。TABLE
当配置了多个复制通道时,此设置是必需的。TABLE
还需要中继日志信息日志的设置,以使复制能够应对意外的暂停,为此--relay-log-recovery
还必须启用该选项。有关更多信息,请参见使复制能够应对意外的停止。该
FILE
设置已弃用,并将在以后的版本中删除。作为文件,中继日志信息日志relay-log.info
默认为命名,您可以使用relay_log_info_file
系统变量更改此名称。从站状态日志位置的设置直接影响
sync_relay_log_info
系统变量设置的影响。仅当没有执行复制线程时,才可以更改设置。relay_log_purge
属性 值 命令行格式 --relay-log-purge[={OFF|ON}] 系统变量 relay_log_purge 范围 Global 动态 是 SET_VAR
提示适用没有 类型 布尔型 默认值 ON 一旦不再需要中继日志文件,则禁用或启用它们的自动清除。默认值为1(
ON
)。relay_log_recovery
属性 值 命令行格式 --relay-log-recovery[={OFF|ON}] 系统变量 relay_log_recovery 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 布尔型 默认值 OFF 如果启用,此变量将在服务器启动后立即启用自动中继日志恢复。恢复过程将创建一个新的中继日志文件,将SQL线程位置初始化为该新的中继日志,并将I / O线程初始化为SQL线程位置。然后继续从主机读取中继日志。该全局变量在运行时为只读。可以
--relay-log-recovery
在从站启动时使用该选项设置其值,应在复制从站意外停止后使用该值,以确保不会处理任何可能损坏的中继日志,并且必须使用该值以确保崩溃安全的从站。默认值为0(禁用)。要提供崩溃安全从站,必须启用此变量(将其设置为1),
relay_log_info_repository
必须将其设置为TABLE
,并且relay_log_purge
必须将其启用。启用relay_log_recovery
时,relay_log_purge
是从没有清除文件中读取中继日志残疾的风险,从而导致数据不一致,因此不是死机安全。有关更多信息,请参见使复制能够应对意外的停止。当使用多线程从站(换句话说
slave_parallel_workers
,大于0)时,从中继日志执行的事务序列中可能会出现诸如间隙之类的不一致性。relay_log_recovery
出现不一致时启用将导致错误,并且该选项无效。在这种情况下,解决方案是发出START SLAVE UNTIL SQL_AFTER_MTS_GAPS
,它将服务器置于更一致的状态,然后发出RESET SLAVE
以删除中继日志。有关更多信息,请参见“复制和事务不一致”。注意
此变量不会影响以下组复制通道:
group_replication_applier
group_replication_recovery
在组上运行的任何其他通道都会受到影响,例如从外部主服务器或另一个组复制的通道。
relay_log_space_limit
属性 值 命令行格式 --relay-log-space-limit=# 系统变量 relay_log_space_limit 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 整数 默认值 0 最低值 0 最大值(64位平台) 18446744073709551615 最大值(32位平台) 4294967295 所有中继日志使用的最大空间量。
report_host
属性 值 命令行格式 --report-host=host_name 系统变量 report_host 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 string 在从站注册期间要向主站报告的从站的主机名或IP地址。此值出现在
SHOW SLAVE HOSTS
主服务器上的输出中。如果您不希望从属设备向主控设备注册自己,请保留该值未设置。注意
从站连接后,主站仅从TCP / IP套接字中读取从站的IP地址是不够的。由于NAT和其他路由问题,该IP可能无效,无法从主服务器或其他主机连接到从服务器。
report_password
属性 值 命令行格式 --report-password=name 系统变量 report_password 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 string 在从站注册期间要向主站报告的从站的帐户密码。
SHOW SLAVE HOSTS
如果主服务器以开头,则此值将显示在主服务器的输出中--show-slave-auth-info
。尽管此变量的名称可能暗示其他名称,
report_password
但未连接到MySQL用户特权系统,因此不一定(或什至可能)与MySQL复制用户帐户的密码相同。report_port
属性 值 命令行格式 --report-port=port_num 系统变量 report_port 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 整数 默认值 [slave_port] 最低值 0 最大值 65535 用于连接到从站的TCP / IP端口号,在从站注册期间向主站报告。仅当从属服务器正在侦听非默认端口时,或者您具有从主服务器或其他客户端到从属服务器的特殊隧道时,才应设置此选项。如果不确定,请不要使用此选项。
该选项的默认值为从站实际使用的端口号。这也是所显示的默认值
SHOW SLAVE HOSTS
。report_user
属性 值 命令行格式 --report-user=name 系统变量 report_user 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 string 在从站注册期间要向主站报告的从站的帐户用户名。
SHOW SLAVE HOSTS
如果主服务器以开头,则此值将显示在主服务器的输出中--show-slave-auth-info
。尽管此变量的名称可能暗示其他含义,
report_user
但未连接到MySQL用户特权系统,因此不一定(或什至可能)与MySQL复制用户帐户的名称相同。rpl_read_size
属性 值 命令行格式 --rpl-read-size=# 系统变量 rpl_read_size 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 8192 最低值 8192 最大值 4294967295 所述
rpl_read_size
系统变量控制以字节为单位从二进制日志文件和中继日志文件中读取数据的最小量。如果这些文件的大容量磁盘I / O活动妨碍了数据库的性能,则当操作系统当前未缓存文件数据时,增加读取大小可能会减少文件读取和I / O停顿。最小值和默认值为
rpl_read_size
8192字节。该值必须是4KB的倍数。请注意,为从二进制日志和中继日志文件读取的每个线程(包括主服务器上的转储线程和从服务器上的协调器线程)分配一个具有此值大小的缓冲区。因此,设置较大的值可能会影响服务器的内存消耗。rpl_semi_sync_slave_enabled
属性 值 命令行格式 --rpl-semi-sync-slave-enabled[={OFF|ON}] 系统变量 rpl_semi_sync_slave_enabled 范围 Global 动态 是 SET_VAR
提示适用没有 类型 布尔型 默认值 OFF 控制是否在从属服务器上启用半同步复制。要启用或禁用插件,请将此变量分别设置为
ON
或OFF
(或1或0)。默认值为OFF
。仅当安装了从属端半同步复制插件时,此变量才可用。
rpl_semi_sync_slave_trace_level
属性 值 命令行格式 --rpl-semi-sync-slave-trace-level=# 系统变量 rpl_semi_sync_slave_trace_level 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 32 从服务器上的半同步复制调试跟踪级别。有关
rpl_semi_sync_master_trace_level
允许的值,请参见。仅当安装了从属端半同步复制插件时,此变量才可用。
rpl_stop_slave_timeout
属性 值 命令行格式 --rpl-stop-slave-timeout=seconds 系统变量 rpl_stop_slave_timeout 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 31536000 最低值 2 最大值 31536000 您可以
STOP SLAVE
通过设置此变量来控制超时之前等待的时间长度(以秒为单位)。这可用于避免使用STOP SLAVE
与从属服务器的不同客户端连接以及其他从属SQL语句之间的死锁。最大值和默认值为
rpl_stop_slave_timeout
31536000秒(1年)。最小为2秒。对该变量的更改对后续STOP SLAVE
语句生效。此变量仅影响发出
STOP SLAVE
语句的客户端。当达到超时时,发布客户端返回一条错误消息,指出命令执行不完整。然后,客户端停止等待从属线程停止,但是从属线程继续尝试停止,并且STOP SLAVE
指令仍然有效。一旦从属线程不再繁忙,STOP SLAVE
则执行该语句,并且从属线程停止。slave_checkpoint_group
属性 值 命令行格式 --slave-checkpoint-group=# 系统变量 slave_checkpoint_group 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 512 最低值 32 最大值 524280 块大小 8 设置在调用检查点操作以更新其状态之前,多线程从属可以处理的最大事务数,如所示
SHOW SLAVE STATUS
。设置此变量对未启用多线程的从站无效。设置此变量不会立即生效。变量的状态适用于所有后续START SLAVE
命令。注意
NDB群集当前不支持多线程从属,它会静默忽略此变量的设置。有关更多信息,请参见“ NDB群集复制中的已知问题”。
此变量与
slave_checkpoint_period
系统变量结合使用,这样的方式可以在超过任何一个限制时执行检查点,并且计数器会跟踪事务数和自最后一个检查点以来经过的时间。除非服务器是使用构建的,否则此变量的最小允许值为32,
-DWITH_DEBUG
在这种情况下,最小值为1。有效值始终为8的倍数;您可以将其设置为非整数倍的值,但是服务器会在存储该值之前将其四舍五入为下一个较低的8的倍数。(例外:调试服务器不执行这种舍入操作。)不管服务器是如何构建的,默认值为512,最大允许值为524280。slave_checkpoint_period
属性 值 命令行格式 --slave-checkpoint-period=# 系统变量 slave_checkpoint_period 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 300 最低值 1 最大值 4G 设置调用检查点操作以更新多线程从站状态之前允许通过的最长时间(以毫秒为单位),如所示
SHOW SLAVE STATUS
。设置此变量对未启用多线程的从站无效。设置此变量将立即对所有复制通道(包括正在运行的通道)生效。注意
NDB群集当前不支持多线程从属,它会静默忽略此变量的设置。有关更多信息,请参见“ NDB群集复制中的已知问题”。
此变量与
slave_checkpoint_group
系统变量结合使用,这样的方式可以在超过任何一个限制时执行检查点,并且计数器会跟踪事务数和自最后一个检查点以来经过的时间。除非服务器是使用构建的,否则此变量的最小允许值为1,
-DWITH_DEBUG
在这种情况下,最小值为0。无论构建服务器的方式如何,默认值为300,最大可能值为4294967296(4GB)。slave_compressed_protocol
属性 值 命令行格式 --slave-compressed-protocol[={OFF|ON}] 不推荐使用 8.0.18 系统变量 slave_compressed_protocol 范围 Global 动态 是 SET_VAR
提示适用没有 类型 布尔型 默认值 OFF 如果主从都支持压缩,是否使用主/从协议的压缩。如果禁用此变量(默认设置),则连接不会被压缩。对该变量所做的更改将在以后的连接尝试中生效。这包括在发出
START SLAVE
语句之后,以及正在运行的I / O线程进行的重新连接(例如,在设置语句MASTER_RETRY_COUNT
选项之后CHANGE MASTER TO
)。从MySQL 8.0.18开始,如果
slave_compressed_protocol
启用,它将优先MASTER_COMPRESSION_ALGORITHMS
于为该CHANGE MASTER TO
语句指定的任何选项。在这种情况下,zlib
如果主机和从机都支持该算法,则与主机的连接将使用压缩。如果slave_compressed_protocol
禁用,则应用值MASTER_COMPRESSION_ALGORITHMS
。从MySQL 8.0.18开始,不建议使用此系统变量。它将在将来的MySQL版本中删除。请参阅旧版连接压缩配置。
slave_exec_mode
属性 值 命令行格式 --slave-exec-mode=mode 系统变量 slave_exec_mode 范围 Global 动态 是 SET_VAR
提示适用没有 类型 列举 默认值 IDEMPOTENT
(NDB)STRICT
(其他)有效值 IDEMPOTENT
STRICT
控制从属线程如何解决复制期间的冲突和错误。
IDEMPOTENT
模式可抑制重复密钥错误和找不到密钥的错误;STRICT
表示不会发生这种抑制。IDEMPOTENT
此模式旨在用于NDB群集复制的多主复制,循环复制和某些其他特殊复制方案中。(有关更多信息,请参见“ NDB集群复制:多主复制和循环复制”和“ NDB集群复制冲突解决”。)NDB集群将忽略显式设置的任何值slave_exec_mode
,并且始终将其视为IDEMPOTENT
。在MySQL Server 8.0中,
STRICT
mode是默认值。设置此变量对所有复制通道(包括正在运行的通道)立即生效。
对于以外的其他存储引擎
NDB
,IDEMPOTENT
仅当您绝对确定可以安全地忽略重复键错误和未找到键错误时,才应使用mode。它旨在用于采用多主复制或循环复制的NDB群集的故障转移方案中,不建议在其他情况下使用。slave_load_tmpdir
属性 值 命令行格式 --slave-load-tmpdir=dir_name 系统变量 slave_load_tmpdir 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 目录名 默认值 Value of --tmpdir 从站创建临时文件的目录的名称。设置此变量将立即对所有复制通道(包括正在运行的通道)生效。默认情况下,变量值等于
tmpdir
系统变量的值,或者在未指定该系统变量时应用的默认值。当从属SQL线程复制一条
LOAD DATA
语句时,它将从中继日志中加载的文件提取到临时文件中,然后将它们加载到表中。如果主服务器上加载的文件很大,则从服务器上的临时文件也很大。因此,建议使用此选项告诉从服务器将临时文件放在具有大量可用空间的某些文件系统中的目录中。在这种情况下,中继日志也很大,因此您可能还需要设置relay_log
系统变量以将中继日志放置在该文件系统中。此选项指定的目录应该位于基于磁盘的文件系统(而不是基于内存的文件系统)中,以便用于复制
LOAD DATA
语句的临时文件可以在计算机重新启动后继续存在。该目录也不应是操作系统在系统启动过程中清除的目录。但是,如果已删除临时文件,复制现在可以在重新启动后继续。slave_max_allowed_packet
属性 值 命令行格式 --slave-max-allowed-packet=# 系统变量 slave_max_allowed_packet 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 1073741824 最低值 1024 最大值 1073741824 此选项设置从SQL和I / O线程可以处理的最大数据包大小(以字节为单位)。设置此变量将立即对所有复制通道(包括正在运行的通道)生效。
max_allowed_packet
添加事件标头后,复制主数据库写入二进制日志事件的时间可能比其设置长。的设置slave_max_allowed_packet
必须大于max_allowed_packet
主服务器上的设置,以便使用基于行的复制进行的较大更新不会导致复制失败。该全局变量的值始终是1024的正整数倍;如果您将其设置为非某个值,则该值将被四舍五入为下一个最大的1024倍,因为它会被存储或使用。设置
slave_max_allowed_packet
为0将导致使用1024。(在所有这种情况下,都会发出截断警告。)默认值和最大值为1073741824(1 GB);默认值为1073741824(1 GB)。最小为1024。slave_net_timeout
属性 值 命令行格式 --slave-net-timeout=# 系统变量 slave_net_timeout 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 60 最低值 1 从站认为连接断开,中止读取并尝试重新连接之前,等待主站发送更多数据或心跳信号的秒数。设置此变量不会立即生效。变量的状态适用于所有后续
START SLAVE
命令。默认值为60秒(一分钟)。第一次重试在超时后立即发生。重试之间的间隔由该语句的
MASTER_CONNECT_RETRY
选项控制CHANGE MASTER TO
,并且重新连接尝试的次数受MASTER_RETRY_COUNT
该CHANGE MASTER TO
语句的选项限制。心跳间隔由语句
MASTER_HEARTBEAT_PERIOD
选项控制,该间隔将在没有数据的情况下停止连接超时(如果连接仍然良好)CHANGE MASTER TO
。心跳间隔的默认值是的一半slave_net_timeout
,它记录在主信息日志中并显示在“replication_connection_configuration
性能模式”表中。请注意slave_net_timeout
,无论是已明确设置还是正在使用先前计算的默认值,更改值或默认设置都不会自动更改心跳间隔。如果连接超时更改,则还必须发出CHANGE MASTER TO
将心跳间隔调整为适当的值,使其发生在连接超时之前。slave_parallel_type
属性 值 命令行格式 --slave-parallel-type=value 系统变量 slave_parallel_type 范围 Global 动态 是 SET_VAR
提示适用没有 类型 列举 默认值 DATABASE 有效值 DATABASE
LOGICAL_CLOCK
对于多线程从属服务器(将复制从属服务器
slave_parallel_workers
设置为大于0的值),请slave_parallel_type
指定用于确定允许哪些事务在该从属服务器上并行执行的策略。该变量对未启用多线程的从站无效。可能的值为:LOGICAL_CLOCK
:属于同一二进制日志组的一部分的事务在主服务器上提交,将并行应用在从服务器上。基于事务的时间戳跟踪事务之间的依赖关系,以在可能的情况下提供附加的并行化。设置此值后binlog_transaction_dependency_tracking
,如果事务中有写集,并且与时间戳相比可以提供改进的结果,则可以在主机上使用系统变量来指定使用写集代替时间戳。DATABASE
:并行应用更新不同数据库的事务。仅当将数据划分为多个数据库时,该值才是合适的,这些数据库正在主数据库上独立并发地更新。不得存在跨数据库约束,因为在从属服务器上可能会违反此类约束。
当
slave_preserve_commit_order=1
设置,只能使用LOGICAL_CLOCK
。如果您的复制拓扑使用多个级别的从服务器,
LOGICAL_CLOCK
则对于从服务器远离主服务器的每个级别,并行化可能会减少。您可以通过binlog_transaction_dependency_tracking
在主服务器上使用来指定使用写集而不是使用时间戳来并行化来减少这种影响。slave_parallel_workers
属性 值 命令行格式 --slave-parallel-workers=# 系统变量 slave_parallel_workers 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 0 最低值 0 最大值 1024 在从属服务器上启用多线程,并设置用于并行执行复制事务的从属应用程序线程数。当该值是大于0的数字时,从属服务器是具有指定数量的应用程序线程加上协调器线程来管理它们的多线程从属服务器。如果您使用多个复制通道,则每个通道具有此线程数。
注意
NDB群集当前不支持多线程从属,它会静默忽略此变量的设置。有关更多信息,请参见“ NDB群集复制中的已知问题”。
在从属服务器上启用多线程时,支持重试事务。如果为
slave_preserve_commit_order=1
,则从属服务器上的事务以与从属服务器的中继日志中出现的顺序相同的顺序在从属服务器上外部化。事务在应用程序线程之间分配的方式由配置slave_parallel_type
。要禁用并行执行,请将此选项设置为0,这将为从属设备提供单个应用程序线程,而没有协调程序线程。使用此设置时,
slave_parallel_type
和slave_preserve_commit_order
系统变量无效,将被忽略。设置
slave_parallel_workers
没有立即生效。变量的状态适用于所有后续START SLAVE
语句。slave_pending_jobs_size_max
属性 值 命令行格式 --slave-pending-jobs-size-max=# 系统变量 slave_pending_jobs_size_max 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值(>= 8.0.12) 128M 预设值(8.0.11) 16M 最低值 1024 最大值 16EiB 块大小 1024 对于多线程从属服务器,此变量设置可用于保存尚未应用事件的从属工作器队列可用的最大内存量(以字节为单位)。设置此变量对未启用多线程的从站无效。设置此变量不会立即生效。变量的状态适用于所有后续
START SLAVE
命令。该变量的最小可能值为1024字节;默认值为128MB。可能的最大值是18446744073709551615(16 exbibytes)。并非1024字节精确倍数的值在存储之前会向下舍入为1024字节的下一个较低倍数。
此变量的值是一个软限制,可以设置为与正常工作负载匹配。如果异常大的事件超出了此大小,则事务将一直保留到所有从属工作器都具有空队列,然后再进行处理。保留所有后续事务,直到完成大事务为止。
slave_preserve_commit_order
属性 值 命令行格式 --slave-preserve-commit-order[={OFF|ON}] 系统变量 slave_preserve_commit_order 范围 Global 动态 是 SET_VAR
提示适用没有 类型 布尔型 默认值 OFF 对于多线程从站(将复制从站
slave_parallel_workers
设置为大于0的值),该设置slave_preserve_commit_order=1
可确保事务以与在从站的中继日志中出现的顺序相同的顺序在从站上执行和提交。这样可以防止从属服务器的中继日志中已执行的事务处理顺序出现间隔,并在从属服务器上保留与主服务器上相同的事务处理历史记录(具有以下限制)。该变量对未启用多线程的从站无效。直到并包括MySQL 8.0.18,该设置
slave_preserve_commit_order=1
要求在从属服务器上启用二进制日志记录(log_bin
)和从属更新日志记录(log_slave_updates
),这是MySQL 8.0的默认设置。从MySQL 8.0.19开始,不需要在设置的从站上执行二进制日志记录和从站更新日志记录slave_preserve_commit_order=1
,可以根据需要将其禁用。在所有版本中,设置slave_preserve_commit_order=1
要求将slave_parallel_type
其设置为LOGICAL_CLOCK
,这不是默认设置。改变前值slave_preserve_commit_order
和slave_parallel_type
,必须停止从SQL线程(对于所有复制通道,如果您正在使用多个复制通道)必须停止。当
slave_preserve_commit_order=0
被设置时,这是缺省值,该多线程从适用于并行的交易可能犯的顺序进行。因此,检查最近执行的事务不能保证主服务器上的所有先前事务都已在从服务器上执行。从站的中继日志中已执行的事务顺序中可能会有间隙。使用多线程从站时,这对日志记录和恢复具有影响。有关更多信息,请参见“复制和事务不一致”。当
slave_preserve_commit_order=1
设置,执行工作线程等待,直到所有以前的事务提交之前提交。当给定线程正在等待其他工作线程提交事务时,它将状态报告为Waiting for preceding transaction to commit
。在这种模式下,多线程从属服务器永远不会进入主服务器不在的状态。这支持使用复制进行读取横向扩展。请参见“使用复制进行横向扩展”。注意
slave_preserve_commit_order=1
不能防止主日志位置滞后,该滞后Exec_master_log_pos
位于已执行事务的位置之后。请参见“复制和事务不一致”。slave_preserve_commit_order=1
如果从属服务器在其二进制日志中使用过滤器(例如),则不会保留提交顺序和事务历史记录--binlog-do-db
。slave_preserve_commit_order=1
不保留非事务DML更新的顺序。这些可能会在中继日志中位于其之前的事务之前提交,这可能会导致从属服务器的中继日志中执行的事务顺序出现差异。- 在MySQL 8.0.19之前的版本中,当相关对象不存在时,
slave_preserve_commit_order=1
不保留带有IF EXISTS
子句的语句顺序。这些可能会在中继日志中位于其之前的事务之前提交,这可能会导致从属服务器的中继日志中执行的事务顺序出现差异。 - 如果正在使用基于语句的复制,并且事务和非事务存储引擎都参与在主服务器上回滚的非XA事务,则在从服务器上保留提交顺序的限制可能会发生。通常,在主服务器上回滚的非XA事务不会复制到从服务器,但是在这种特殊情况下,该事务可能会复制到从服务器。如果发生这种情况,则没有二进制日志记录的多线程从站将无法处理事务回滚,
slave_rows_search_algorithms
属性 值 命令行格式 --slave-rows-search-algorithms=value 不推荐使用 8.0.18 系统变量 slave_rows_search_algorithms 范围 Global 动态 是 SET_VAR
提示适用没有 类型 组 默认值 INDEX_SCAN,HASH_SCAN 有效值 TABLE_SCAN,INDEX_SCAN
INDEX_SCAN,HASH_SCAN
TABLE_SCAN,HASH_SCAN
TABLE_SCAN,INDEX_SCAN,HASH_SCAN
(相当于INDEX_SCAN,HASH_SCAN)在为基于行的日志记录和复制准备一批行时,此系统变量控制如何在行中搜索匹配项,特别是是否使用哈希扫描。现在不建议使用该系统变量。默认设置
INDEX_SCAN,HASH_SCAN
对于性能而言是最佳的,并且可以在所有情况下正常工作。slave_skip_errors
属性 值 命令行格式 --slave-skip-errors=name 系统变量 slave_skip_errors 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 string 默认值 OFF 有效值 OFF
[list of error codes]
all
ddl_exist_errors
通常,当从属服务器发生错误时,复制会停止,这使您有机会手动解决数据中的不一致问题。当语句返回变量值中列出的任何错误时,此变量将导致从属SQL线程继续复制。
slave_sql_verify_checksum
属性 值 命令行格式 --slave-sql-verify-checksum[={OFF|ON}] 系统变量 slave_sql_verify_checksum 范围 Global 动态 是 SET_VAR
提示适用没有 类型 布尔型 默认值 ON 使从属SQL线程使用从中继日志中读取的校验和来验证数据。如果发生不匹配,则从站会因错误而停止。设置此变量将立即对所有复制通道(包括正在运行的通道)生效。
注意
从网络上接受事件时,如果可能,从属I / O线程总是读取校验和。
slave_transaction_retries
属性 值 命令行格式 --slave-transaction-retries=# 系统变量 slave_transaction_retries 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 10 最低值 0 最大值(64位平台) 18446744073709551615 最大值(32位平台) 4294967295 设置单线程或多线程从属服务器上复制从属SQL线程在停止之前自动重试失败的事务的最大次数。设置此变量将立即对所有复制通道(包括正在运行的通道)生效。默认值为10。将变量设置为0将禁用事务的自动重试。
如果复制从SQL线程失败,因为一个来执行事务
InnoDB
死锁或因为交易的执行时间超过InnoDB
的innodb_lock_wait_timeout
或NDB
的TransactionDeadlockDetectionTimeout
或TransactionInactiveTimeout
,它会自动重试slave_transaction_retries
与错误停止前的时间。具有非临时错误的事务不会重试。性能模式表
replication_applier_status
在该COUNT_TRANSACTIONS_RETRIES
列中显示了每个复制通道上发生的重试次数。性能架构表replication_applier_status_by_worker
显示了有关单线程或多线程复制从属服务器上的各个应用程序线程重试事务的详细信息,并标识了导致最后一次事务和当前正在进行的事务重新尝试的错误。slave_type_conversions
属性 值 命令行格式 --slave-type-conversions=set 系统变量 slave_type_conversions 范围 Global 动态 没有 SET_VAR
提示适用没有 类型 组 默认值 有效值 ALL_LOSSY
ALL_NON_LOSSY
ALL_SIGNED
ALL_UNSIGNED
使用基于行的复制时,控制从属设备上有效的类型转换模式。它的值是逗号分隔的集合从列表中零个或多个元素:
ALL_LOSSY
,ALL_NON_LOSSY
,ALL_SIGNED
,ALL_UNSIGNED
。将此变量设置为空字符串以禁止在主服务器和从服务器之间进行类型转换。设置此变量将立即对所有复制通道(包括正在运行的通道)生效。有关适用于基于行的复制中的属性提升和降级的类型转换模式的其他信息,请参见基于行的复制:属性提升和降级。
sql_slave_skip_counter
属性 值 系统变量 sql_slave_skip_counter 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 从属服务器应跳过的来自主服务器的事件数。设置该选项不会立即生效。该变量适用于下
START SLAVE
一条语句;下START SLAVE
一条语句还将该值改回0。当此变量设置为非零值并且配置了多个复制通道时,该START SLAVE
语句只能与该子句一起使用。FOR CHANNEL channel
此选项与基于GTID的复制不兼容,并且在时不得将其设置为非零值
gtid_mode=ON
。如果在使用GTID时需要跳过事务,请改为使用gtid_executed
主服务器。请参阅注入空事务,以获取有关如何执行此操作的信息。重要
如果跳过通过设置此变量指定的事件数会导致从站开始在事件组的中间,则从站将继续跳过,直到找到下一个事件组的起点并从该点开始。有关更多信息,请参见“ SET GLOBAL sql_slave_skip_counter语句”。
sync_master_info
属性 值 命令行格式 --sync-master-info=# 系统变量 sync_master_info 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 10000 最低值 0 最大值(64位平台) 18446744073709551615 最大值(32位平台) 4294967295 此变量对复制从站的影响取决于从站的
master_info_repository
设置为FILE
还是TABLE
,如以下段落中所述。master_info_repository = FILE。如果的值
sync_master_info
大于0,则从服务器在每个事件后将其master.info
文件同步到磁盘(使用fdatasync()
)sync_master_info
。如果为0,则MySQL服务器不执行master.info
文件与磁盘的同步;否则为0 。而是,服务器依赖操作系统来定期刷新其内容,就像处理任何其他文件一样。master_info_repository = TABLE。如果的值
sync_master_info
大于0,则从服务器在每个sync_master_info
事件后都会更新其主信息存储库表。如果为0,则表永远不会更新。默认值为
sync_master_info
10000。设置此变量将立即对所有复制通道(包括正在运行的通道)生效。sync_relay_log
属性 值 命令行格式 --sync-relay-log=# 系统变量 sync_relay_log 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 10000 最低值 0 最大值(64位平台) 18446744073709551615 最大值(32位平台) 4294967295 属性 值 如果该变量的值大于0,则
fdatasync()
在将每个sync_relay_log
事件写入中继日志后,MySQL服务器都会使用将该服务器的中继日志同步到磁盘。设置此变量将立即对所有复制通道(包括正在运行的通道)生效。设置
sync_relay_log
为0将导致不对磁盘进行任何同步。在这种情况下,服务器依赖操作系统不时刷新中继日志的内容,就像处理其他任何文件一样。值1是最安全的选择,因为在发生崩溃的情况下,您从中继日志中最多丢失一个事件。但是,它也是最慢的选择(除非磁盘具有电池备份的高速缓存,这使得同步非常快)。
sync_relay_log_info
属性 值 命令行格式 --sync-relay-log-info=# 系统变量 sync_relay_log_info 范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 10000 最低值 0 最大值(64位平台) 18446744073709551615 最大值(32位平台) 4294967295 默认值为
sync_relay_log_info
10000。设置此变量将立即对所有复制通道(包括正在运行的通道)生效。此变量对复制从属服务器的影响取决于服务器的
relay_log_info_repository
设置(FILE
或TABLE
)。如果设置为TABLE
,则变量的效果还取决于中继日志信息表使用的存储引擎是事务性的(例如InnoDB
)还是事务性的(MyISAM
)。对于sync_relay_log_info
零和大于零的值,这些因素对服务器行为的影响如下:sync_relay_log_info = 0
- 如果
relay_log_info_repository
设置为FILE
,则MySQL服务器不执行relay-log.info
文件与磁盘的同步;而是,服务器依赖操作系统来定期刷新其内容,就像处理任何其他文件一样。 - 如果
relay_log_info_repository
将设置为TABLE
,并且该表的存储引擎是事务性的,那么在每次事务处理后都会更新该表。(sync_relay_log_info
在这种情况下,该设置将被有效忽略。) - 如果
relay_log_info_repository
设置为TABLE
,并且该表的存储引擎不是事务性的,则该表永远不会更新。
- 如果
sync_relay_log_info =N> 0
- 如果
relay_log_info_repository
将设置为FILE
,则从服务器在每次事务后将其relay-log.info
文件同步到磁盘(使用fdatasync()
)N
。 - 如果
relay_log_info_repository
将设置为TABLE
,并且该表的存储引擎是事务性的,那么在每次事务处理后都会更新该表。(sync_relay_log_info
在这种情况下,该设置将被有效忽略。) - 如果
relay_log_info_repository
将设置为TABLE
,并且该表的存储引擎不是事务性的,则在每个N
事件之后都会更新该表。
- 如果