本节介绍适用于副本服务器的服务器选项和系统变量,包含以下内容:
在
命令行或
选项文件中指定选项。CHANGE REPLICATION SOURCE TO
通过使用语句(从 MySQL 8.0.23 开始)或语句(MySQL 8.0.23 之前) ,可以在服务器运行时设置许多选项
CHANGE
MASTER TO
。使用指定系统变量值
SET
。
服务器标识。
在源和每个副本上,您必须设置
server_id
系统变量以建立一个唯一的复制 ID,范围从 1 到 2 32 − 1。“唯一”
意味着每个 ID 必须不同于任何其他源使用的每个其他 ID或复制拓扑中的副本。示例my.cnf
文件:
[mysqld]
server-id=3
本节介绍用于控制副本服务器的启动选项。许多这些选项可以在服务器运行时使用CHANGE REPLICATION
SOURCE TO
语句(从 MySQL 8.0.23 开始)或
CHANGE MASTER TO
语句(MySQL 8.0.23 之前)进行设置。其他的,比如
--replicate-*
选项,只能在副本服务器启动时设置。与复制相关的系统变量将在本节后面讨论。
-
命令行格式 --master-info-file=file_name
弃用 8.0.18 类型 文件名 默认值 master.info
现在不推荐使用此选项。如果已设置,它用于设置副本的连接元数据存储库的文件名
master_info_repository=FILE
。--master-info-file
和master_info_repository
系统变量的使用已被弃用,因为连接元数据存储库的文件已被崩溃安全表取代。有关连接元数据存储库的信息,请参阅 第 17.2.4.2 节,“复制元数据存储库”。 -
命令行格式 --master-retry-count=#
弃用 是的 类型 整数 默认值 86400
最小值 0
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
副本在放弃之前尝试重新连接到源的次数。默认值为 86400 次。值 0 表示“无限”,副本尝试永远连接。当副本达到其连接超时(由
replica_net_timeout
或slave_net_timeout
系统变量指定)而没有从源接收数据或心跳信号时,将触发重新连接尝试。SOURCE_CONNECT_RETRY
以| 设置的时间间隔尝试重新连接 |MASTER_CONNECT_RETRY
的选项 语句(默认为每 60 秒)。CHANGE REPLICATION SOURCE TO
CHANGE MASTER TO
此选项已弃用;希望在未来的 MySQL 版本中将其删除。使用
SOURCE_RETRY_COUNT
| |MASTER_RETRY_COUNT
的选项 声明代替。CHANGE REPLICATION SOURCE TO
CHANGE MASTER TO
-
命令行格式 --max-relay-log-size=#
系统变量 max_relay_log_size
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 0
最小值 0
最大值 1073741824
单元 字节 块大小 4096
服务器自动轮换中继日志文件的大小。如果此值不为零,则中继日志在其大小超过此值时会自动轮换。如果此值为零(默认值),则发生中继日志轮换的大小由 的值确定
max_binlog_size
。有关详细信息,请参阅第 17.2.4.1 节,“中继日志”。 -
命令行格式 --relay-log-purge[={OFF|ON}]
系统变量 relay_log_purge
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 ON
一旦不再需要,就禁用或启用中继日志的自动清除。默认值为 1(启用)。这是一个全局变量,可以使用 动态更改。在启用该选项时禁用清除中继日志会 冒数据一致性的风险,因此不是崩溃安全的。
SET GLOBAL relay_log_purge =
N
--relay-log-recovery
-
命令行格式 --relay-log-space-limit=#
系统变量 relay_log_space_limit
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 整数 默认值 0
最小值 0
最大值 18446744073709551615
单元 字节 此选项对副本上所有中继日志的总大小(以字节为单位)设置上限。值为 0 表示 “无限制”. 这对于磁盘空间有限的副本服务器主机很有用。当达到限制时,I/O(接收方)线程停止从源服务器读取二进制日志事件,直到 SQL 线程赶上并删除一些未使用的中继日志。请注意,此限制不是绝对的:在某些情况下,SQL(应用程序)线程需要更多事件才能删除中继日志。在这种情况下,接收线程会超过限制,直到应用程序线程可以删除一些中继日志,因为不这样做会导致死锁。您不应设置
--relay-log-space-limit
为小于值的两倍--max-relay-log-size
(或者--max-binlog-size
如果--max-relay-log-size
为 0)。在那种情况下,接收线程有可能因为超出而等待空闲空间--relay-log-space-limit
,但是应用程序线程没有要清除的中继日志并且无法满足接收线程。这会强制接收线程--relay-log-space-limit
暂时忽略。 -
命令行格式 --replicate-do-db=name
类型 细绳 使用数据库的名称创建复制过滤器。也可以使用创建此类过滤器
CHANGE REPLICATION FILTER REPLICATE_DO_DB
。此选项支持通道特定的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。
channel_1
在名为use 的通道上配置特定于通道的复制过滤器 。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是原义冒号。有关更多信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器” 。--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.january SET amount=amount+1000;
这种“只检查默认数据库”行为 的主要原因是,很难仅从语句中知道它是否应该被复制(例如,如果您正在使用多表
DELETE
语句或UPDATE
跨多个操作的多表语句数据库)。如果没有必要,只检查默认数据库而不是所有数据库也会更快。基于行的复制。 告诉复制 SQL 线程限制复制到数据库
db_name
。只有属于的表db_name
被更改;当前数据库对此没有影响。假设副本启动--replicate-do-db=sales
并且基于行的复制生效,然后在源上运行以下语句:USE prices; UPDATE sales.february SET amount=amount+100;
replica上的数据库中的
february
表sales
是按照UPDATE
语句改变的;无论USE
声明是否发布,都会发生这种情况。但是,在使用基于行的复制和时,在源上发出以下语句对副本没有影响--replicate-do-db=sales
:USE prices; UPDATE prices.march SET amount=amount-25;
即使将语句
USE prices
更改为USE sales
,UPDATE
语句的效果仍然不会被复制。--replicate-do-db
与基于行的复制相比,基于语句的复制的处理方式的 另一个重要区别 在于引用多个数据库的语句。假设副本以 开始--replicate-do-db=db1
,并在源上执行以下语句:USE db1; UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
如果您使用的是基于语句的复制,那么两个表都会在副本上更新。但是,当使用基于行的复制时,只会
table1
影响副本;因为table2
在不同的数据库中,table2
所以副本不会被UPDATE
. 现在假设使用USE db1
了一个USE db4
语句而不是语句:USE db4; UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
在这种情况下,
UPDATE
当使用基于语句的复制时,该语句对副本没有影响。但是,如果您使用的是基于行的复制, 副本UPDATE
会发生变化table1
,但不会table2
——换句话说,只有命名为 的数据库中的表--replicate-do-db
会发生变化,默认数据库的选择对此行为没有影响。如果您需要跨数据库更新才能工作,请 改用。请参阅第 17.2.5 节,“服务器如何评估复制过滤规则”。
--replicate-wild-do-table=
db_name
.%笔记此选项影响复制的方式与
--binlog-do-db
影响二进制日志记录的方式相同,复制格式对--replicate-do-db
复制行为的影响与日志记录格式对--binlog-do-db
. -
命令行格式 --replicate-ignore-db=name
类型 细绳 使用数据库的名称创建复制过滤器。也可以使用创建此类过滤器
CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB
。此选项支持通道特定的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。
channel_1
在名为use 的通道上配置特定于通道的复制过滤器 。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是原义冒号。有关更多信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器” 。--replicate-ignore-db:
channel_1
:db_name
笔记全局复制过滤器不能在为组复制配置的 MySQL 服务器实例上使用,因为在某些服务器上过滤事务会使组无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接与组复制相关的复制通道,例如组成员也充当组外源的副本。它们不能用于
group_replication_applier
或group_replication_recovery
频道。要指定多个要忽略的数据库,请多次使用此选项,每个数据库一次。因为数据库名称可以包含逗号,所以如果您提供以逗号分隔的列表,它将被视为单个数据库的名称。
与 一样
--replicate-do-db
,此过滤的精确效果取决于使用的是基于语句的复制还是基于行的复制,这将在接下来的几段中进行描述。基于语句的复制。 告诉复制 SQL 线程不要复制默认数据库(即由 选定的数据库
USE
)为 的任何语句db_name
。基于行的复制。 告诉复制 SQL 线程不要更新数据库中的任何表
db_name
。默认数据库没有影响。使用基于语句的复制时,以下示例不会像您预期的那样工作。假设副本开始于
--replicate-ignore-db=sales
并且您在源上发出以下语句:USE prices; UPDATE sales.january SET amount=amount+1000;
在这种情况下 会复制 该
UPDATE
语句 ,因为它仅适用于默认数据库(由该 语句确定)。因为 在语句中明确指定了数据库,所以语句没有被过滤。但是,当使用基于行的复制时, 语句的效果不会传播到副本,副本的 表副本也不会改变;在这种情况下, 导致对源的副本中的表进行的所有更改--replicate-ignore-db
USE
sales
UPDATE
sales.january
--replicate-ignore-db=sales
sales
被副本忽略的数据库。如果您正在使用跨数据库更新并且不希望复制这些更新,则不应使用此选项。请参阅第 17.2.5 节,“服务器如何评估复制过滤规则”。
如果您需要跨数据库更新才能工作,请 改用。请参阅第 17.2.5 节,“服务器如何评估复制过滤规则”。
--replicate-wild-ignore-table=
db_name
.%笔记此选项影响复制的方式与
--binlog-ignore-db
影响二进制日志记录的方式相同,复制格式对--replicate-ignore-db
复制行为的影响与日志记录格式对--binlog-ignore-db
. --replicate-do-table=
db_name.tbl_name
命令行格式 --replicate-do-table=name
类型 细绳 通过告诉复制 SQL 线程将复制限制到给定的表来创建复制过滤器。要指定多个表,请多次使用此选项,每个表一次。这适用于跨数据库更新和默认数据库更新,与
--replicate-do-db
. 请参阅 第 17.2.5 节,“服务器如何评估复制过滤规则”。您还可以通过发出CHANGE REPLICATION FILTER REPLICATE_DO_TABLE
语句来创建这样的过滤器。此选项支持通道特定的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。
channel_1
在名为use 的通道上配置特定于通道的复制过滤器 。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是原义冒号。有关更多信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器” 。--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
类型 细绳 通过告诉复制 SQL 线程不要复制任何更新指定表的语句来创建复制过滤器,即使任何其他表可能由同一语句更新。要指定要忽略的多个表,请多次使用此选项,每个表一次。这适用于跨数据库更新,与
--replicate-ignore-db
. 请参阅 第 17.2.5 节,“服务器如何评估复制过滤规则”。您还可以通过发出CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE
语句来创建这样的过滤器。此选项支持通道特定的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。
channel_1
在名为use 的通道上配置特定于通道的复制过滤器 。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是原义冒号。有关更多信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器” 。--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
类型 细绳 告诉副本创建一个复制过滤器,将指定的数据库转换为
to_name
它是否from_name
在源上。只有涉及表的语句会受到影响,而 、 和 等语句不会CREATE DATABASE
受到DROP DATABASE
影响ALTER DATABASE
。要指定多次重写,请多次使用此选项。服务器使用具有
from_name
匹配值的第一个。数据库名称翻译 在 测试规则之前完成。--replicate-*
您还可以通过发出CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB
语句来创建这样的过滤器。如果您
--replicate-rewrite-db
在命令行上使用该选项并且该>
字符对于您的命令解释器来说是特殊的,请引用该选项值。例如:$> mysqld --replicate-rewrite-db="olddb->newdb"
该
--replicate-rewrite-db
选项的效果因查询使用的是基于语句还是基于行的二进制日志记录格式而异。使用基于语句的格式,DML 语句根据语句指定的当前数据库进行转换USE
。使用基于行的格式,DML 语句根据修改表所在的数据库进行转换。DDL 语句始终根据USE
语句指定的当前数据库进行过滤,而不管二进制日志记录格式如何。为确保重写产生预期结果,尤其是与其他复制过滤选项结合使用时,请在使用该
--replicate-rewrite-db
选项时遵循以下建议:如果遵循这些建议,则可以安全地将
--replicate-rewrite-db
选项与表级复制过滤选项结合使用,例如--replicate-do-table
.此选项支持通道特定的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。指定通道名称后跟一个冒号,然后是过滤器规范。第一个冒号被解释为分隔符,任何后续冒号都被解释为文字冒号。例如,要在名为 的通道上配置特定于通道的复制过滤器
channel_1
,请使用:$> mysqld --replicate-rewrite-db=channel_1:db_name1->db_name2
如果您使用冒号但未指定通道名称,则该选项会为默认复制通道配置复制过滤器。有关更多信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器” 。
笔记全局复制过滤器不能在为组复制配置的 MySQL 服务器实例上使用,因为在某些服务器上过滤事务会使组无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接与组复制相关的复制通道,例如组成员也充当组外源的副本。它们不能用于
group_replication_applier
或group_replication_recovery
频道。-
命令行格式 --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
在副本上设置,您可以使用此选项组合启动服务器,但您不能在服务器运行时更改为任何其他 GTID 模式。如果设置了任何其他 GTID 模式,则服务器不会使用此选项组合启动。默认情况下,复制 I/O(接收方)线程不会将二进制日志事件写入中继日志,如果它们具有副本的服务器 ID(此优化有助于节省磁盘使用量)。如果你想使用
--replicate-same-server-id
,请确保在让副本读取它自己的你希望复制 SQL(应用程序)线程执行的事件之前使用此选项启动副本。 --replicate-wild-do-table=
db_name.tbl_name
命令行格式 --replicate-wild-do-table=name
类型 细绳 通过告知复制 SQL(应用程序)线程将复制限制为任何更新表与指定数据库和表名称模式匹配的语句来创建复制过滤器。模式可以包含
%
和_
通配符,其含义与LIKE
模式匹配运算符相同。要指定多个表,请多次使用此选项,每个表一次。这适用于跨数据库更新。请参阅第 17.2.5 节,“服务器如何评估复制过滤规则”。您还可以通过发出CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE
语句来创建这样的过滤器。此选项支持通道特定的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。
channel_1
在名为use 的通道上配置特定于通道的复制过滤器 。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是原义冒号。有关更多信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器” 。--replicate-wild-do-table:
channel_1
:db_name.tbl_name
重要的全局复制过滤器不能在为组复制配置的 MySQL 服务器实例上使用,因为在某些服务器上过滤事务会使组无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接与组复制相关的复制通道,例如组成员也充当组外源的副本。它们不能用于
group_replication_applier
或group_replication_recovery
频道。该
--replicate-wild-do-table
选项指定的复制过滤器适用于表、视图和触发器。它不适用于存储过程和函数或事件。要过滤对后面的对象进行操作的语句,请使用一个或多个--replicate-*-db
选项。例如,
--replicate-wild-do-table=foo%.bar%
仅复制使用数据库名称以 开头foo
且表名称以 开头的表的更新bar
。如果表名模式是
%
,它匹配任何表名并且该选项也适用于数据库级语句(CREATE DATABASE
、DROP DATABASE
和ALTER DATABASE
)。例如,如果您使用--replicate-wild-do-table=foo%.%
,如果数据库名称与模式匹配,则会复制数据库级语句foo%
。重要的表级复制过滤器仅适用于在查询中明确提及和操作的表。它们不适用于查询隐式更新的表。例如,
GRANT
更新mysql.user
系统表但未提及该表的语句不受指定mysql.%
为通配符模式的过滤器的影响。要在数据库或表名称模式中包含文字通配符,请使用反斜杠对它们进行转义。例如,要复制名为 的数据库的所有表
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
类型 细绳 创建一个复制过滤器,防止复制 SQL 线程复制任何表与给定通配符模式匹配的语句。要指定要忽略的多个表,请多次使用此选项,每个表一次。这适用于跨数据库更新。请参阅 第 17.2.5 节,“服务器如何评估复制过滤规则”。您还可以通过发出
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE
语句来创建这样的过滤器。此选项支持通道特定的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。
channel_1
在名为use 的通道上配置特定于通道的复制过滤器 。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是原义冒号。有关更多信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器” 。--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
选项的描述。在选项值中包含文字通配符的规则也与 for 相同--replicate-wild-ignore-table
。重要的表级复制过滤器仅适用于在查询中明确提及和操作的表。它们不适用于查询隐式更新的表。例如,
GRANT
更新mysql.user
系统表但未提及该表的语句不受指定mysql.%
为通配符模式的过滤器的影响。如果您需要过滤掉
GRANT
语句或其他管理语句,一个可能的解决方法是使用--replicate-ignore-db
过滤器。此过滤器在当前有效的默认数据库上运行,由USE
语句确定。因此,您可以创建一个过滤器来忽略未复制的数据库的语句,然后USE
在发出您想要忽略的任何管理语句之前立即发出将默认数据库切换到该数据库的语句。在管理语句中,命名应用该语句的实际数据库。例如,如果
--replicate-ignore-db=nonreplicated
在副本服务器上配置,则以下语句序列会导致该GRANT
语句被忽略,因为默认数据库nonreplicated
有效:USE nonreplicated; GRANT SELECT, INSERT ON replicated.t1 TO 'someuser'@'somehost';
-
命令行格式 --skip-replica-start[={OFF|ON}]
介绍 8.0.26 系统变量 skip_replica_start
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
从 MySQL 8.0.26 开始,使用
--skip-replica-start
代替--skip-slave-start
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用--skip-slave-start
.--skip-replica-start
告诉副本服务器在服务器启动时不要启动复制 I/O(接收方)和 SQL(应用程序)线程。要稍后启动线程,请使用START REPLICA
语句。您可以使用
skip_replica_start
系统变量代替命令行选项,以允许使用 MySQL Server 的特权结构访问此功能,这样数据库管理员就不需要对操作系统的任何特权访问。 -
命令行格式 --skip-slave-start[={OFF|ON}]
弃用 8.0.26 系统变量 skip_slave_start
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
从 MySQL 8.0.26 开始, 已弃用,应改用
--skip-slave-start
别名 。--skip-replica-start
在 MySQL 8.0.26 之前的版本中,使用--skip-slave-start
.告诉副本服务器在服务器启动时不要启动复制 I/O(接收方)和 SQL(应用程序)线程。要稍后启动线程,请使用
START REPLICA
语句。从 MySQL 8.0.24 开始,您可以使用
skip_slave_start
系统变量代替命令行选项,以允许使用 MySQL Server 的权限结构访问此功能,这样数据库管理员就不需要对操作系统的任何特权访问。 --slave-skip-errors=[
err_code1
,err_code2
,...|all|ddl_exist_errors]命令行格式 --slave-skip-errors=name
弃用 8.0.26 系统变量 slave_skip_errors
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 细绳 默认值 OFF
有效值 OFF
[list of error codes]
all
ddl_exist_errors
通常,当副本发生错误时,复制会停止,这使您有机会手动解决数据中的不一致问题。当语句返回选项值中列出的任何错误时,此选项会导致复制 SQL 线程继续复制。
除非您完全理解为什么会出错,否则不要使用此选项。如果您的复制设置和客户端程序没有错误,并且 MySQL 本身也没有错误,那么停止复制的错误应该永远不会发生。不加选择地使用此选项会导致副本与源完全不同步,而您不知道为什么会发生这种情况。
对于错误代码,您应该使用副本的错误日志和 的输出中的错误消息提供的数字
SHOW REPLICA STATUS
。附录 B,错误消息和常见问题,列出了服务器错误代码。速记值
ddl_exist_errors
相当于错误代码列表1007,1008,1050,1051,1054,1060,1061,1068,1094,1146
。您也可以(但不应该)使用非常不推荐的值
all
来使副本忽略所有错误消息并继续运行而不管发生什么。不用说,如果您使用all
,则无法保证数据的完整性。在这种情况下,如果副本的数据与源上的数据相去甚远,请不要抱怨(或提交错误报告)。你已被警告。NDB
由于检查纪元序列号 的内部机制,在 NDB 集群之间复制时,此选项不会以相同的方式工作 ;通常,一旦NDB
检测到缺少或顺序不正确的纪元号,它会立即停止副本应用程序线程。从 NDB 8.0.28 开始,您可以通过同时指定--ndb-applier-allow-skip-epoch
with来覆盖此行为--slave-skip-errors
;这样做会导致NDB
忽略跳过的纪元交易。例子:
--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=#
弃用 8.0.29 类型 整数 默认值 0
最小值 0
当此选项设置为
value
0(默认值)以外的某个正整数时,它会影响复制行为,如下所示:复制 SQL 线程启动后,value
允许执行日志事件;之后,复制 SQL 线程不再接收任何事件,就像来自源的网络连接被切断一样。复制 SQL 线程继续运行,输出SHOW REPLICA STATUS
显示Yes
在Replica_IO_Running
和Replica_SQL_Running
列中,但没有从中继日志中读取更多事件。MySQL 测试套件在内部使用此选项进行复制测试和调试。它不适用于生产环境。从 MySQL 8.0.29 开始,它已被弃用,并可能在未来版本的 MySQL 中删除。
--disconnect-slave-event-count
命令行格式 --disconnect-slave-event-count=#
弃用 8.0.29 类型 整数 默认值 0
MySQL 测试套件在内部使用此选项进行复制测试和调试。它不适用于生产环境。从 MySQL 8.0.29 开始,它已被弃用,并可能在未来版本的 MySQL 中删除。
以下列表描述了用于控制副本服务器的系统变量。它们可以在服务器启动时设置,其中一些可以在运行时使用
SET
. 与副本一起使用的服务器选项已在本节前面列出。
-
命令行格式 --init-replica=name
介绍 8.0.26 系统变量 init_replica
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 细绳 从 MySQL 8.0.26 开始,使用
init_replica
代替init_slave
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用init_slave
.init_replica
类似于init_connect
,但它是每次复制 SQL 线程启动时由副本服务器执行的字符串。init_connect
字符串的格式与变量的格式相同 。START REPLICA
该变量的设置对后续语句 生效 。笔记复制 SQL 线程在执行之前向客户端发送确认
init_replica
。因此,返回时不保证init_replica
已经执行START REPLICA
。有关详细信息,请参阅 第 13.4.2.8 节,“START REPLICA 语句”。 -
命令行格式 --init-slave=name
弃用 8.0.26 系统变量 init_slave
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 细绳 从 MySQL 8.0.26 开始, 已弃用, 应改用
init_slave
别名。init_replica
在 MySQL 8.0.26 之前的版本中,使用init_slave
.init_slave
类似于init_connect
,但它是每次复制 SQL 线程启动时由副本服务器执行的字符串。init_connect
字符串的格式与变量的格式相同 。START REPLICA
该变量的设置对后续语句 生效 。笔记复制 SQL 线程在执行之前向客户端发送确认
init_slave
。因此,返回时不保证init_slave
已经执行START REPLICA
。有关详细信息,请参阅 第 13.4.2.8 节,“START REPLICA 语句”。 -
命令行格式 --log-slow-replica-statements[={OFF|ON}]
介绍 8.0.26 系统变量 log_slow_replica_statements
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
从 MySQL 8.0.26 开始,使用
log_slow_replica_statements
代替log_slow_slave_statements
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用log_slow_slave_statements
.启用慢速查询日志后, 为在副本上执行时间
log_slow_replica_statements
超过几秒的查询启用日志记录 。long_query_time
请注意,如果基于行的复制正在使用 (binlog_format=ROW
),log_slow_replica_statements
则无效。只有在二进制日志中以语句格式记录查询时,查询才会添加到副本的慢查询日志中,即binlog_format=STATEMENT
设置为 when 时,或者binlog_format=MIXED
设置为 statement 格式时记录语句。设置时以行格式记录的慢速查询binlog_format=MIXED
,或记录时binlog_format=ROW
已设置,即使log_slow_replica_statements
已启用,也不会添加到副本的慢查询日志中。设置
log_slow_replica_statements
不会立即生效。变量的状态适用于所有后续START REPLICA
语句。另请注意,全局设置long_query_time
适用于 SQL 线程的生命周期。如果更改该设置,则必须停止并重新启动复制 SQL 线程以在那里实施更改(例如,通过发出带有选项STOP REPLICA
的START REPLICA
语句SQL_THREAD
)。 -
命令行格式 --log-slow-slave-statements[={OFF|ON}]
弃用 8.0.26 系统变量 log_slow_slave_statements
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
从 MySQL 8.0.26 开始, 已弃用, 应改用
log_slow_slave_statements
别名 。log_slow_replica_statements
在 MySQL 8.0.26 之前的版本中,使用log_slow_slave_statements
.启用慢速查询日志后, 为在副本上执行时间
log_slow_slave_statements
超过几秒的查询启用日志记录 。long_query_time
请注意,如果基于行的复制正在使用 (binlog_format=ROW
),log_slow_slave_statements
则无效。只有在二进制日志中以语句格式记录查询时,查询才会添加到副本的慢查询日志中,即binlog_format=STATEMENT
设置为 when 时,或者binlog_format=MIXED
设置为 statement 格式时记录语句。设置时以行格式记录的慢速查询binlog_format=MIXED
,或记录时binlog_format=ROW
已设置,即使log_slow_slave_statements
已启用,也不会添加到副本的慢查询日志中。设置
log_slow_slave_statements
不会立即生效。变量的状态适用于所有后续START REPLICA
语句。另请注意,全局设置long_query_time
适用于 SQL 线程的生命周期。如果更改该设置,则必须停止并重新启动复制 SQL 线程以在那里实施更改(例如,通过发出带有选项STOP REPLICA
的START REPLICA
语句SQL_THREAD
)。 -
命令行格式 --master-info-repository={FILE|TABLE}
弃用 8.0.23 系统变量 master_info_repository
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 细绳 默认值 TABLE
有效值 FILE
TABLE
现在不推荐使用此系统变量。该设置
TABLE
是默认设置,并且在配置多个复制通道时是必需的。替代设置FILE
以前已弃用。使用默认设置,副本将有关源的元数据(包括状态和连接信息)记录到系统数据库中名为 的
InnoDB
表中 。有关连接元数据存储库的更多信息,请参阅 第 17.2.4 节,“中继日志和复制元数据存储库”。mysql
mysql.slave_master_info
该
FILE
设置将副本的连接元数据存储库写入master.info
默认命名的文件。可以使用该--master-info-file
选项更改名称。 -
命令行格式 --max-relay-log-size=#
系统变量 max_relay_log_size
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 0
最小值 0
最大值 1073741824
单元 字节 块大小 4096
如果副本对其中继日志的写入导致当前日志文件大小超过此变量的值,则副本将轮转中继日志(关闭当前文件并打开下一个文件)。如果
max_relay_log_size
为 0,则服务器max_binlog_size
同时使用二进制日志和中继日志。如果max_relay_log_size
大于 0,它会限制中继日志的大小,这使您可以为两个日志设置不同的大小。您必须设置max_relay_log_size
在 4096 字节和 1GB(含)之间,或设置为 0。默认值为 0。请参阅 第 17.2.3 节,“复制线程”。 -
中继日志文件的基本名称。对于默认复制通道,中继日志的默认基本名称是
. 对于非默认复制通道,中继日志的默认基本名称是 ,其中是记录在此中继日志中的复制通道的名称。host_name
-relay-binhost_name
-relay-bin-channel
channel
服务器将文件写入数据目录,除非给定基本名称和前导绝对路径名以指定不同的目录。服务器通过向基本名称添加数字后缀来按顺序创建中继日志文件。
复制服务器上的中继日志和中继日志索引不能与二进制日志和二进制日志索引重名,二进制日志和二进制日志索引的名称由
--log-bin
和--log-bin-index
选项指定。如果二进制日志和中继日志文件的基本名称相同,服务器会发出一条错误消息并且不会启动。由于 MySQL 解析服务器选项的方式,如果您在服务器启动时指定此变量,则必须提供一个值;仅当未实际指定该选项时才使用默认基本名称。如果
relay_log
在服务器启动时指定系统变量而不指定值,则可能会导致意外行为;此行为取决于使用的其他选项、指定它们的顺序以及它们是在命令行上还是在选项文件中指定。有关 MySQL 如何处理服务器选项的更多信息,请参阅 第 4.2.2 节,“指定程序选项”。如果指定此变量,则指定的值也用作中继日志索引文件的基本名称。
relay_log_index
您可以通过使用系统变量 指定不同的中继日志索引文件基本名称来覆盖此行为 。当服务器从索引文件中读取一个条目时,它会检查该条目是否包含相对路径。如果是,则路径的相对部分将替换为使用
relay_log
系统变量设置的绝对路径。绝对路径保持不变;在这种情况下,必须手动编辑索引以启用要使用的新路径。您可能会发现
relay_log
系统变量在执行以下任务时很有用:创建名称独立于主机名的中继日志。
如果您需要将中继日志放在数据目录以外的某个区域,因为您的中继日志往往非常大并且您不想减少
max_relay_log_size
。通过使用磁盘之间的负载平衡来提高速度。
relay_log_basename
您可以从系统变量 中获取中继日志文件名(和路径) 。 -
系统变量 relay_log_basename
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 文件名 默认值 datadir + '/' + hostname + '-relay-bin'
保存中继日志文件的基本名称和完整路径。最大变量长度为 256。该变量由服务器设置并且是只读的。
-
命令行格式 --relay-log-index=file_name
系统变量 relay_log_index
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 文件名 默认值 *host_name*-relay-bin.index
中继日志索引文件的名称。最大变量长度是 256。如果你没有指定这个变量,但是指定了
relay_log
系统变量,它的值被用作中继日志索引文件的默认基本名称。如果relay_log
也未指定,则对于默认复制通道,默认名称为
,使用主机名。对于非默认复制通道,默认名称为 ,其中是记录在该中继日志索引中的复制通道的名称。host_name
-relay-bin.indexhost_name
-relay-bin-channel
.indexchannel
中继日志文件的默认位置是数据目录,或使用
relay_log
系统变量指定的任何其他位置。您可以使用relay_log_index
系统变量来指定替代位置,方法是将前导绝对路径名添加到基本名称以指定不同的目录。复制服务器上的中继日志和中继日志索引不能与二进制日志和二进制日志索引重名,二进制日志和二进制日志索引的名称由
--log-bin
和--log-bin-index
选项指定。如果二进制日志和中继日志文件的基本名称相同,服务器会发出一条错误消息并且不会启动。由于 MySQL 解析服务器选项的方式,如果您在服务器启动时指定此变量,则必须提供一个值;仅当未实际指定该选项时才使用默认基本名称。如果
relay_log_index
在服务器启动时指定系统变量而不指定值,则可能会导致意外行为;此行为取决于使用的其他选项、指定它们的顺序以及它们是在命令行上还是在选项文件中指定。有关 MySQL 如何处理服务器选项的更多信息,请参阅 第 4.2.2 节,“指定程序选项”。 -
命令行格式 --relay-log-info-file=file_name
弃用 8.0.18 系统变量 relay_log_info_file
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 文件名 默认值 relay-log.info
现在不推荐使用此系统变量。如果已设置,它用于设置副本的应用程序元数据存储库的文件名
relay_log_info_repository=FILE
。relay_log_info_file
和relay_log_info_repository
系统变量的使用已被弃用,因为应用程序元数据存储库的文件已被崩溃安全表取代。有关应用程序元数据存储库的信息,请参阅 第 17.2.4.2 节,“复制元数据存储库”。 -
命令行格式 --relay-log-info-repository=value
弃用 8.0.23 系统变量 relay_log_info_repository
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 细绳 默认值 TABLE
有效值 FILE
TABLE
现在不推荐使用此系统变量。该设置
TABLE
是默认设置,并且在配置多个复制通道时是必需的。副本的应用程序元数据存储库的TABLE
设置也需要使复制对意外停止具有弹性。有关更多信息,请参阅 第 17.4.2 节,“处理副本的意外停止” 。替代设置FILE
以前已弃用。使用默认设置,副本将其应用程序元数据存储库存储为名为 的系统数据库 中的
InnoDB
表。有关应用程序元数据存储库的更多信息,请参阅 第 17.2.4 节,“中继日志和复制元数据存储库”。mysql
mysql.slave_relay_log_info
该
FILE
设置将副本的应用程序元数据存储库写入relay-log.info
默认命名的文件。可以使用relay_log_info_file
系统变量更改名称。 -
命令行格式 --relay-log-purge[={OFF|ON}]
系统变量 relay_log_purge
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 ON
一旦不再需要,禁用或启用中继日志文件的自动清除。默认值为 1 (
ON
)。 -
命令行格式 --relay-log-recovery[={OFF|ON}]
系统变量 relay_log_recovery
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
如果启用,此变量会在服务器启动后立即启用自动中继日志恢复。恢复过程创建一个新的中继日志文件,将 SQL(应用程序)线程位置初始化到这个新的中继日志,并将 I/O(接收方)线程初始化到应用程序线程位置。然后继续从源读取中继日志。如果
SOURCE_AUTO_POSITION=1
使用该CHANGE REPLICATION SOURCE TO
选项为复制通道设置,则用于启动复制的源位置可能是在连接中接收到的位置,而不是在此过程中分配的位置。这个全局变量在运行时是只读的。它的值可以
--relay-log-recovery
在副本服务器启动时使用选项设置,应该在副本意外停止后使用,以确保没有处理可能损坏的中继日志,并且必须使用它来保证崩溃安全的副本。默认值为 0(禁用)。有关对意外停止最具弹性的副本设置组合的信息,请参阅 第 17.4.2 节,“处理副本的意外停止”。对于多线程副本(
replica_parallel_workers
或slave_parallel_workers
大于 0),--relay-log-recovery
启动时的设置会自动处理从中继日志执行的事务序列中的任何不一致和间隙。当使用基于文件位置的复制时,可能会出现这些间隙。(有关更多详细信息,请参阅 第 17.5.1.34 节,“复制和事务不一致”。)中继日志恢复过程使用与START REPLICA UNTIL SQL_AFTER_MTS_GAPS
语句会。当副本达到一致的无间隙状态时,中继日志恢复过程继续从 SQL(应用程序)线程位置开始从源获取更多事务。当使用基于 GTID 的复制时,从 MySQL 8.0.18 开始,多线程副本首先检查是否MASTER_AUTO_POSITION
设置为ON
,如果是,则省略计算应该跳过或不跳过的事务的步骤,以便旧的中继日志恢复过程不需要。笔记此变量不影响以下组复制通道:
group_replication_applier
group_replication_recovery
在一个组上运行的任何其他通道都会受到影响,例如从外部源或另一个组复制的通道。
-
命令行格式 --relay-log-space-limit=#
系统变量 relay_log_space_limit
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 整数 默认值 0
最小值 0
最大值 18446744073709551615
单元 字节 用于所有中继日志的最大空间量。
-
命令行格式 --replica-checkpoint-group=#
介绍 8.0.26 系统变量 replica_checkpoint_group
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 512
最小值 32
最大值 524280
块大小 8
从 MySQL 8.0.26 开始,使用
replica_checkpoint_group
代替slave_checkpoint_group
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_checkpoint_group
.replica_checkpoint_group
设置在调用检查点操作以更新其状态之前多线程副本可以处理的最大事务数,如 所示SHOW REPLICA STATUS
。设置此变量对未启用多线程的副本没有影响。设置此变量不会立即生效。变量的状态适用于所有后续START REPLICA
命令。笔记NDB Cluster 目前不支持多线程副本,它会默默地忽略此变量的设置。有关更多信息,请参阅 第 23.7.3 节,“NDB Cluster 复制中的已知问题”。
该变量与
replica_checkpoint_period
系统变量结合使用,当超过任一限制时,将执行检查点,并重置跟踪交易数量和自上次检查点以来经过的时间的计数器。此变量的最小允许值为 32,除非服务器是使用构建的
-DWITH_DEBUG
,在这种情况下最小值为 1。有效值始终为 8 的倍数;您可以将它设置为一个不是这样的倍数的值,但服务器在存储该值之前将其向下舍入为下一个较小的 8 倍数。(例外:调试服务器不执行此类舍入。)无论服务器是如何构建的,默认值为 512,最大允许值为 524280。 -
命令行格式 --replica-checkpoint-period=#
介绍 8.0.26 系统变量 replica_checkpoint_period
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 300
最小值 1
最大值 4294967295
单元 毫秒 从 MySQL 8.0.26 开始,使用
replica_sql_verify_checksum
代替slave_sql_verify_checksum
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_sql_verify_checksum
.replica_checkpoint_period
设置在调用检查点操作以更新多线程副本的状态之前允许通过的最长时间(以毫秒为单位),如 所示SHOW REPLICA STATUS
。设置此变量对未启用多线程的副本没有影响。设置此变量会立即对所有复制通道生效,包括正在运行的通道。笔记NDB Cluster 目前不支持多线程副本,它会默默地忽略此变量的设置。有关更多信息,请参阅 第 23.7.3 节,“NDB Cluster 复制中的已知问题”。
该变量与
replica_checkpoint_group
系统变量结合使用,当超过任一限制时,将执行检查点,并重置跟踪交易数量和自上次检查点以来经过的时间的计数器。此变量的最小允许值为 1,除非服务器是使用 构建的
-DWITH_DEBUG
,在这种情况下最小值为 0。无论服务器是如何构建的,默认值为 300 毫秒,最大可能值为 4294967295 毫秒(约 49.7 天)。 -
命令行格式 --replica-compressed-protocol[={OFF|ON}]
介绍 8.0.26 系统变量 replica_compressed_protocol
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
从 MySQL 8.0.26 开始,使用
replica_compressed_protocol
代替slave_compressed_protocol
,已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_compressed_protocol
.replica_compressed_protocol
如果源和副本都支持,则指定是否使用源/副本连接协议的压缩。如果此变量被禁用(默认),连接将被解压缩。对此变量的更改会在后续的连接尝试中生效;这包括在发出一条START REPLICA
语句之后,以及由正在运行的复制 I/O(接收方)线程进行的重新连接。由系统变量激活的二进制日志事务压缩(自 MySQL 8.0.20 起可用)
binlog_transaction_compression
也可用于节省带宽。如果将二进制日志事务压缩与协议压缩结合使用,则协议压缩对数据进行操作的机会较少,但仍可以压缩标头以及那些未压缩的事件和事务有效负载。有关二进制日志事务压缩的更多信息,请参阅 第 5.4.4.5 节,“二进制日志事务压缩”。如果
replica_compressed_protocol
启用,它优先于 为语句SOURCE_COMPRESSION_ALGORITHMS
指定的任何选项。在这种情况下,如果源和副本都支持该算法,则与CHANGE REPLICATION SOURCE TO
源的连接将使用压缩。zlib
如果replica_compressed_protocol
禁用,则SOURCE_COMPRESSION_ALGORITHMS
应用的值。有关更多信息,请参阅 第 4.2.8 节,“连接压缩控制”。 -
命令行格式 --replica-exec-mode=mode
介绍 8.0.26 系统变量 replica_exec_mode
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 枚举 默认值 IDEMPOTENT
(新开发银行)STRICT
(其他)有效值 STRICT
IDEMPOTENT
从 MySQL 8.0.26 开始,使用
replica_exec_mode
代替slave_exec_mode
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_exec_mode
.replica_exec_mode
控制复制线程如何解决复制期间的冲突和错误。IDEMPOTENT
模式导致抑制重复键和未找到键的错误;STRICT
意味着不会发生这种抑制。IDEMPOTENT
mode 旨在用于 NDB Cluster Replication 的多源复制、循环复制和其他一些特殊复制场景。(有关更多信息,请参阅 第 23.7.10 节,“NDB Cluster 复制:双向和循环复制”和 第 23.7.11 节,“NDB Cluster 复制冲突解决”。)NDB Cluster 忽略为明确设置的任何值replica_exec_mode
,并始终将其视为作为IDEMPOTENT
。在 MySQL Server 8.0 中,
STRICT
mode 是默认值。设置此变量对所有复制通道(包括正在运行的通道)立即生效。
对于除 之外的存储引擎
NDB
,IDEMPOTENT
仅当您绝对确定可以安全地忽略重复键错误和未找到键错误时,才应使用模式。它旨在用于采用多源复制或循环复制的 NDB Cluster 的故障转移场景,不建议在其他情况下使用。 -
命令行格式 --replica-load-tmpdir=dir_name
介绍 8.0.26 系统变量 replica_load_tmpdir
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 目录名称 默认值 Value of --tmpdir
从 MySQL 8.0.26 开始,使用
replica_load_tmpdir
代替slave_load_tmpdir
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_load_tmpdir
.replica_load_tmpdir
指定副本创建临时文件的目录名称。设置此变量会立即对所有复制通道生效,包括正在运行的通道。默认情况下,变量值等于tmpdir
系统变量的值,或者在未指定该系统变量时应用的默认值。复制 SQL 线程在复制一条
LOAD DATA
语句时,会从中继日志中提取要加载的文件到临时文件中,然后将这些文件加载到表中。如果源上加载的文件很大,则副本上的临时文件也很大。因此,建议使用此选项告诉副本将临时文件放在某个具有大量可用空间的文件系统中的目录中。在那种情况下,中继日志也很大,因此您可能还需要设置relay_log
系统变量以将中继日志放置在该文件系统中。此选项指定的目录应位于基于磁盘的文件系统(而不是基于内存的文件系统)中,以便用于复制
LOAD DATA
语句的临时文件可以在机器重新启动后继续存在。该目录也不应该是在系统启动过程中被操作系统清除的目录。但是,如果临时文件已被删除,复制现在可以在重新启动后继续。 -
命令行格式 --replica-max-allowed-packet=#
介绍 8.0.26 系统变量 replica_max_allowed_packet
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 1073741824
最小值 1024
最大值 1073741824
单元 字节 块大小 1024
从 MySQL 8.0.26 开始,使用
replica_max_allowed_packet
代替slave_max_allowed_packet
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_max_allowed_packet
.replica_max_allowed_packet
设置复制 SQL(应用程序)和 I/O(接收方)线程可以处理的最大数据包大小(以字节为单位)。设置此变量会立即对所有复制通道生效,包括正在运行的通道。添加事件标头后,源可能会写入比其max_allowed_packet
设置更长的二进制日志事件。的设置replica_max_allowed_packet
必须大于max_allowed_packet
源上的设置,以便使用基于行的复制的大型更新不会导致复制失败。这个全局变量的值始终是 1024 的正整数倍;如果您将其设置为某个不是的值,则该值将向下舍入为下一个最高的 1024 倍数,因为它已被存储或使用;设置
replica_max_allowed_packet
为 0 会导致使用 1024。(在所有此类情况下都会发出截断警告。)默认值和最大值为 1073741824 (1 GB);最小值为 1024。 -
命令行格式 --replica-net-timeout=#
介绍 8.0.26 系统变量 replica_net_timeout
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 60
最小值 1
最大值 31536000
单元 秒 从 MySQL 8.0.26 开始,使用
replica_net_timeout
代替slave_net_timeout
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_net_timeout
.replica_net_timeout
指定在副本认为连接断开、中止读取并尝试重新连接之前等待更多数据或来自源的心跳信号的秒数。设置此变量不会立即生效。变量的状态适用于所有后续START REPLICA
命令。默认值为 60 秒(一分钟)。第一次重试在超时后立即发生。重试之间的间隔由语句的
SOURCE_CONNECT_RETRY
选项 控制CHANGE REPLICATION SOURCE TO
,重新连接尝试的次数受SOURCE_RETRY_COUNT
选项限制。心跳间隔,如果连接仍然良好,则停止在没有数据的情况下发生的连接超时,由 语句的
SOURCE_HEARTBEAT_PERIOD
选项 控制。CHANGE REPLICATION SOURCE TO
心跳间隔默认为 值的一半replica_net_timeout
,它记录在副本的连接元数据存储库中,并显示在replication_connection_configuration
Performance Schema 表中。请注意,更改值或默认设置replica_net_timeout
不会自动更改心跳间隔,无论是已明确设置还是使用先前计算的默认值。如果更改了连接超时,您还必须CHANGE REPLICATION SOURCE TO
将心跳间隔调整为适当的值,以便在连接超时之前发生。 -
命令行格式 --replica-parallel-type=value
介绍 8.0.26 弃用 8.0.29 系统变量 replica_parallel_type
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 枚举 默认值(≥ 8.0.27) LOGICAL_CLOCK
默认值 (8.0.26) DATABASE
有效值 DATABASE
LOGICAL_CLOCK
从 MySQL 8.0.26 开始,使用
replica_parallel_type
代替slave_parallel_type
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_parallel_type
.对于多线程副本(
replica_parallel_workers
或slave_parallel_workers
设置为大于 0 的值的副本),replica_parallel_type
指定用于决定允许哪些事务在副本上并行执行的策略。该变量对未启用多线程的副本没有影响。可能的值是:LOGICAL_CLOCK
:基于复制源写入二进制日志的时间戳,事务在副本上并行应用。事务之间的依赖关系根据它们的时间戳进行跟踪,以在可能的情况下提供额外的并行化。DATABASE
:更新不同数据库的事务是并行应用的。仅当数据被分区到多个数据库中并在源上独立并同时更新时,此值才适用。必须没有跨数据库约束,因为这样的约束可能会在副本上被违反。
replica_preserve_commit_order
启用或 时slave_preserve_commit_order
,您必须使用LOGICAL_CLOCK
. 在 MySQL 8.0.27 之前,DATABASE
是默认的。从 MySQL 8.0.27 开始,副本服务器默认启用多线程(replica_parallel_workers=4
默认情况下),并且LOGICAL_CLOCK
是默认的。(在 MySQL 8.0.27 及更高版本中,replica_preserve_commit_order
也默认启用。)当复制拓扑使用多个级别的副本时,
LOGICAL_CLOCK
对于副本远离源的每个级别,可能会实现较少的并行化。为了补偿这种影响,您应该 在源 上以及每个中间副本上设置或 设置binlog_transaction_dependency_tracking
, 以指定在可能的情况下使用写入集而不是时间戳来进行并行化。WRITESET
WRITESET_SESSION
binlog_transaction_compression
当使用系统变量 启用二进制日志事务压缩时 ,如果replica_parallel_type
设置为DATABASE
,则在调度事务之前映射所有受事务影响的数据库。DATABASE
与为每个事件映射和调度的未压缩事务相比,将 二进制日志事务压缩与策略一起使用可以降低并行度。replica_parallel_type
从 MySQL 8.0.29 开始弃用,支持使用数据库分区的事务并行化。期望在未来的版本中删除对这些的支持,并在以后LOGICAL_CLOCK
专门使用。 -
命令行格式 --replica-parallel-workers=#
介绍 8.0.26 系统变量 replica_parallel_workers
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值(≥ 8.0.27) 4
默认值 (8.0.26) 0
最小值 0
最大值 1024
从 MySQL 8.0.26 开始,使用
replica_parallel_workers
代替slave_parallel_workers
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_parallel_workers
.replica_parallel_workers
在副本上启用多线程并设置用于并行执行复制事务的应用程序线程数。当该值为大于 1 的数字时,副本是一个多线程副本,具有指定数量的应用程序线程,加上一个协调器线程来管理它们。如果您使用多个复制通道,则每个通道都有此数量的线程。在 MySQL 8.0.27 之前,这个系统变量默认为 0,所以副本默认是单线程的。从 MySQL 8.0.27 开始,默认值为 4,因此副本默认为多线程。
从 MySQL 8.0.30 开始,不推荐将此变量设置为 0,这样做会引发警告;0 作为允许的值
replica_parallel_workers
将在未来的 MySQL 版本中删除;改为将其设置为 1,效果相同。在副本上启用多线程时支持重试事务。
replica_preserve_commit_order=ON
设置或 设置时slave_preserve_commit_order=ON
,副本上的事务将按照它们在副本的中继日志中出现的相同顺序在副本上外部化。事务在应用程序线程之间分布的方式由replica_parallel_type
(从 MySQL 8.0.26 开始)或slave_parallel_type
(在 MySQL 8.0.26 之前)配置。从 MySQL 8.0.27 开始,这些系统变量也有适合多线程的默认值。要禁用并行执行,请设置
replica_parallel_workers
为 1,这会为副本提供单个应用程序线程而没有协调程序线程。使用此设置,replica_parallel_type
orslave_parallel_type
和replica_preserve_commit_order
orslave_preserve_commit_order
系统变量将不起作用并被忽略。CHANGE REPLICATION SOURCE TO
从 MySQL 8.0.27 开始,如果在副本上启用该选项时禁用并行执行GTID_ONLY
,则副本实际上使用一个并行工作程序来利用重试事务而不访问文件位置的方法。对于一个并行工作人员,replica_preserve_commit_order
或者slave_preserve_commit_order
系统变量也没有作用。设置
replica_parallel_workers
不会立即生效。变量的状态适用于所有后续START REPLICA
语句。笔记NDB Cluster 当前不支持多线程副本。有关如何 处理此变量的设置的 更多信息,请参阅 第 23.7.3 节,“NDB Cluster 复制中的已知问题” 。
NDB
-
命令行格式 --replica-pending-jobs-size-max=#
介绍 8.0.26 系统变量 replica_pending_jobs_size_max
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 128M
最小值 1024
最大值 16EiB
单元 字节 块大小 1024
从 MySQL 8.0.26 开始,使用
replica_pending_jobs_size_max
代替slave_pending_jobs_size_max
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_pending_jobs_size_max
.对于多线程副本,此变量设置可用于持有尚未应用的事件的应用程序队列的最大内存量(以字节为单位)。设置此变量对未启用多线程的副本没有影响。设置此变量不会立即生效。变量的状态适用于所有后续
START REPLICA
命令。此变量的最小可能值为 1024 字节;默认值为 128MB。最大可能值为 18446744073709551615(16 exbibytes)。在存储之前,不是 1024 字节的精确倍数的值将向下舍入为下一个较低的 1024 字节倍数。
此变量的值是一个软限制,可以设置为与正常工作负载相匹配。如果异常大的事件超过此大小,事务将被暂停,直到所有工作线程的队列都为空,然后再进行处理。所有后续交易都将暂停,直到大笔交易完成。
-
命令行格式 --replica-preserve-commit-order[={OFF|ON}]
介绍 8.0.26 系统变量 replica_preserve_commit_order
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值(≥ 8.0.27) ON
默认值 (8.0.26) OFF
从 MySQL 8.0.26 开始,使用
replica_preserve_commit_order
代替slave_preserve_commit_order
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_preserve_commit_order
.对于多线程副本(
replica_parallel_workers
设置为大于 0 的值的副本),设置replica_preserve_commit_order=ON
确保事务在副本上执行和提交的顺序与它们在副本的中继日志中出现的顺序相同。这可以防止从副本的中继日志执行的事务序列中出现间隙,并在副本上保留与源上相同的事务历史记录(具有下面列出的限制)。此变量对未启用多线程的副本没有影响。在 MySQL 8.0.27 之前,该系统变量默认为
OFF
,这意味着事务可能会乱序提交。从MySQL 8.0.27开始,副本服务器默认开启多线程(replica_parallel_workers=4
by default),replica_preserve_commit_order=ON
也是默认的,设置replica_parallel_type=LOGICAL_CLOCK
也是默认的。同样从 MySQL 8.0.27 开始,replica_preserve_commit_order
如果设置为 1,则忽略replica_parallel_workers
设置,因为在这种情况下,无论如何都会保留事务的顺序。副本上不需要二进制日志记录和副本更新日志记录来设置
replica_preserve_commit_order=ON
,并且可以根据需要禁用。设置replica_preserve_commit_order=ON
要求replica_parallel_type
设置为LOGICAL_CLOCK
,这 不是MySQL 8.0.27之前的默认设置。replica_preserve_commit_order
在更改和的值之前replica_parallel_type
,必须停止复制 SQL 线程(对于所有复制通道,如果您使用多个复制通道)。设置时
replica_preserve_commit_order=OFF
,多线程副本并行应用的事务可能会乱序提交。因此,检查最近执行的事务并不能保证来自源的所有先前事务都已在副本上执行。从副本的中继日志执行的事务序列中可能存在间隙。这对使用多线程副本时的日志记录和恢复有影响。有关更多信息,请参阅 第 17.5.1.34 节,“复制和事务不一致” 。设置时
replica_preserve_commit_order=ON
,正在执行的工作线程会等到所有先前的事务都已提交后再提交。当给定的线程正在等待其他工作线程提交它们的事务时,它将其状态报告为Waiting for preceding transaction to commit
。使用此模式,多线程副本永远不会进入源未处于的状态。这支持使用复制进行读取扩展。请参阅 第 17.4.5 节,“使用复制进行横向扩展”。笔记replica_preserve_commit_order=ON
不防止源二进制日志位置滞后,其中Exec_master_log_pos
落后于已执行事务的位置。请参阅 第 17.5.1.34 节,“复制和事务不一致”。replica_preserve_commit_order=ON
如果副本在其二进制日志上使用过滤器,则不会保留提交顺序和事务历史记录,例如--binlog-do-db
.replica_preserve_commit_order=ON
不保留非事务性 DML 更新的顺序。这些可能会在中继日志中先于它们的事务之前提交,这可能会导致从副本的中继日志中执行的事务序列中出现间隙。如果正在使用基于语句的复制,并且事务和非事务存储引擎都参与在源上回滚的非 XA 事务,则可能会限制在副本上保留提交顺序。通常,在源上回滚的非 XA 事务不会复制到副本,但在这种特定情况下,事务可能会复制到副本。如果确实发生这种情况,则没有二进制日志记录的多线程副本不会处理事务回滚,
-
命令行格式 --replica-sql-verify-checksum[={OFF|ON}]
介绍 8.0.26 系统变量 replica_sql_verify_checksum
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 ON
从 MySQL 8.0.26 开始,使用
replica_sql_verify_checksum
代替slave_sql_verify_checksum
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_sql_verify_checksum
.slave_sql_verify_checksum
使复制 SQL(应用程序)线程使用从中继日志读取的校验和来验证数据。如果不匹配,副本会因错误而停止。设置此变量会立即对所有复制通道生效,包括正在运行的通道。笔记当通过网络接受事件时,复制 I/O(接收方)线程总是尽可能读取校验和。
-
命令行格式 --replica-transaction-retries=#
介绍 8.0.26 系统变量 replica_transaction_retries
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 10
最小值 0
最大值 18446744073709551615
从 MySQL 8.0.26 开始,使用
replica_transaction_retries
代替slave_transaction_retries
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_transaction_retries
.replica_transaction_retries
设置单线程或多线程副本上复制 SQL 线程在停止前自动重试失败事务的最大次数。设置此变量会立即对所有复制通道生效,包括正在运行的通道。默认值为 10。将变量设置为 0 将禁用事务的自动重试。InnoDB
如果复制 SQL 线程由于死锁或因为事务的执行时间超过InnoDB
sinnodb_lock_wait_timeout
或NDB
sTransactionDeadlockDetectionTimeout
或 而无法执行事务,它会 在因错误而停止之前TransactionInactiveTimeout
自动重试 times。replica_transaction_retries
不会重试具有非临时错误的事务。Performance Schema 表 在列中
replication_applier_status
显示了每个复制通道上发生的重试次数COUNT_TRANSACTIONS_RETRIES
。Performance Schema 表replication_applier_status_by_worker
显示了单线程或多线程副本上各个应用程序线程重试事务的详细信息,并标识了导致最后一个事务和当前正在进行的事务被重试的错误。 -
命令行格式 --replica-type-conversions=set
介绍 8.0.26 系统变量 replica_type_conversions
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 放 默认值 有效值 ALL_LOSSY
ALL_NON_LOSSY
ALL_SIGNED
ALL_UNSIGNED
从 MySQL 8.0.26 开始,使用
replica_type_conversions
代替slave_type_conversions
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_type_conversions
.replica_type_conversions
使用基于行的复制时,控制对副本有效的类型转换模式。它的值是一个逗号分隔的集合,由列表中的零个或多个元素组成:ALL_LOSSY
,ALL_NON_LOSSY
,ALL_SIGNED
,ALL_UNSIGNED
。将此变量设置为空字符串以禁止源和副本之间的类型转换。设置此变量会立即对所有复制通道生效,包括正在运行的通道。有关适用于基于行的复制中的属性提升和降级的类型转换模式的其他信息,请参阅 基于行的复制:属性提升和降级。
replication_optimize_for_static_plugin_config
命令行格式 --replication-optimize-for-static-plugin-config[={OFF|ON}]
介绍 8.0.23 系统变量 replication_optimize_for_static_plugin_config
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
使用共享锁,避免不必要的锁获取,以提高半同步复制的性能。随着副本数量的增加,此设置
replication_sender_observe_commit_only
会有所帮助,因为争用锁会降低性能。启用此系统变量后,无法卸载半同步复制插件,因此您必须在卸载完成之前禁用该系统变量。该系统变量可以在安装半同步复制插件之前或之后启用,也可以在复制运行时启用。半同步复制源服务器也可以通过启用此系统变量获得性能优势,因为它们使用与副本相同的锁定机制。
replication_optimize_for_static_plugin_config
可以在服务器上使用组复制时启用。在这种情况下,当由于高工作负载而争用锁时,它可能会提高性能。replication_sender_observe_commit_only
命令行格式 --replication-sender-observe-commit-only[={OFF|ON}]
介绍 8.0.23 系统变量 replication_sender_observe_commit_only
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
限制回调以提高半同步复制的性能。随着副本数量的增加,此设置
replication_optimize_for_static_plugin_config
会有所帮助,因为争用锁会降低性能。该系统变量可以在安装半同步复制插件之前或之后启用,也可以在复制运行时启用。半同步复制源服务器也可以通过启用此系统变量获得性能优势,因为它们使用与副本相同的锁定机制。
-
命令行格式 --report-host=host_name
系统变量 report_host
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 细绳 在副本注册期间要报告给源的副本的主机名或 IP 地址。该值出现在
SHOW REPLICAS
源服务器上的输出中。如果您不希望副本向源注册自己,请保留该值。笔记在副本连接后,源仅从 TCP/IP 套接字读取副本服务器的 IP 地址是不够的。由于 NAT 和其他路由问题,该 IP 可能无法从源主机或其他主机连接到副本。
-
命令行格式 --report-password=name
系统变量 report_password
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 细绳 副本注册时上报给源的副本账号密码。如果源是用或 启动的,则此值出现在
SHOW REPLICAS
源服务器上 的输出中。--show-replica-auth-info
--show-slave-auth-info
尽管此变量的名称可能另有含义,
report_password
但未连接到 MySQL 用户权限系统,因此不一定(甚至可能)与 MySQL 复制用户帐户的密码相同。 -
命令行格式 --report-port=port_num
系统变量 report_port
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 整数 默认值 [slave_port]
最小值 0
最大值 65535
用于连接到副本的 TCP/IP 端口号,将在副本注册期间报告给源。仅当副本在非默认端口上侦听或者如果您有从源或其他客户端到副本的特殊隧道时才设置此项。如果不确定,请不要使用此选项。
此选项的默认值是副本实际使用的端口号。这也是 显示的默认值
SHOW REPLICAS
。 -
命令行格式 --report-user=name
系统变量 report_user
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 细绳 在副本注册期间要报告给源的副本的帐户用户名。如果源是用或 启动的,则此值出现在
SHOW REPLICAS
源服务器上 的输出中。--show-replica-auth-info
--show-slave-auth-info
尽管此变量的名称可能另有含义,
report_user
但未连接到 MySQL 用户权限系统,因此不一定(甚至可能)与 MySQL 复制用户帐户的名称相同。 -
命令行格式 --rpl-read-size=#
系统变量 rpl_read_size
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 8192
最小值 8192
最大值 4294959104
单元 字节 块大小 8192
rpl_read_size
系统变量控制从二进制日志文件和中继日志文件读取的最小数据量(以字节为单位) 。如果这些文件的繁重磁盘 I/O 活动阻碍了数据库的性能,那么当文件数据当前未被操作系统缓存时,增加读取大小可能会减少文件读取和 I/O 停顿。的最小值和默认值为
rpl_read_size
8192 字节。该值必须是 4KB 的倍数。请注意,为从二进制日志和中继日志文件读取的每个线程分配了此值大小的缓冲区,包括源上的转储线程和副本上的协调器线程。因此,设置较大的值可能会对服务器的内存消耗产生影响。 -
命令行格式 --rpl-semi-sync-replica-enabled[={OFF|ON}]
介绍 8.0.26 系统变量 rpl_semi_sync_replica_enabled
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
rpl_semi_sync_replica_enabled
rpl_semi_sync_replica
在副本上安装了(semisync_replica.so
library ) 插件以设置半同步复制 时可用 。如果安装了rpl_semi_sync_slave
插件(semisync_slave.so
库),rpl_semi_sync_slave_enabled
则可用。rpl_semi_sync_replica_enabled
控制是否在副本服务器上启用半同步复制。要启用或禁用插件,请分别将此变量设置为ON
或OFF
(或 1 或 0)。默认值为OFF
。此变量仅在安装了副本端半同步复制插件时可用。
rpl_semi_sync_replica_trace_level
命令行格式 --rpl-semi-sync-replica-trace-level=#
介绍 8.0.26 系统变量 rpl_semi_sync_replica_trace_level
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 32
最小值 0
最大值 4294967295
rpl_semi_sync_replica_trace_level
rpl_semi_sync_replica
在副本上安装了(semisync_replica.so
library ) 插件以设置半同步复制 时可用 。如果安装了rpl_semi_sync_slave
插件(semisync_slave.so
库),rpl_semi_sync_slave_trace_level
则可用。rpl_semi_sync_replica_trace_level
控制副本服务器上的半同步复制调试跟踪级别。请参阅rpl_semi_sync_master_trace_level
允许值。此变量仅在安装了副本端半同步复制插件时可用。
-
命令行格式 --rpl-semi-sync-slave-enabled[={OFF|ON}]
系统变量 rpl_semi_sync_slave_enabled
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
rpl_semi_sync_slave_enabled
rpl_semi_sync_slave
在副本上安装了(semisync_slave.so
library ) 插件以设置半同步复制 时可用。如果安装了rpl_semi_sync_replica
插件(semisync_replica.so
库),rpl_semi_sync_replica_enabled
则可用。rpl_semi_sync_slave_enabled
控制是否在副本服务器上启用半同步复制。要启用或禁用插件,请分别将此变量设置为ON
或OFF
(或 1 或 0)。默认值为OFF
。此变量仅在安装了副本端半同步复制插件时可用。
rpl_semi_sync_slave_trace_level
命令行格式 --rpl-semi-sync-slave-trace-level=#
系统变量 rpl_semi_sync_slave_trace_level
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 32
最小值 0
最大值 4294967295
rpl_semi_sync_slave_trace_level
rpl_semi_sync_slave
在副本上安装了(semisync_slave.so
library ) 插件以设置半同步复制 时可用。如果安装了rpl_semi_sync_replica
插件(semisync_replica.so
库),rpl_semi_sync_replica_trace_level
则可用。rpl_semi_sync_slave_trace_level
控制副本服务器上的半同步复制调试跟踪级别。请参阅rpl_semi_sync_master_trace_level
允许值。此变量仅在安装了副本端半同步复制插件时可用。
-
命令行格式 --rpl-stop-replica-timeout=#
介绍 8.0.26 系统变量 rpl_stop_replica_timeout
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 31536000
最小值 2
最大值 31536000
单元 秒 从 MySQL 8.0.26 开始,使用
rpl_stop_replica_timeout
代替rpl_stop_slave_timeout
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用rpl_stop_slave_timeout
.STOP REPLICA
您可以通过设置此变量来控制超时前等待 的时间长度(以秒为单位) 。这可用于避免STOP REPLICA
使用与副本的不同客户端连接的其他 SQL 语句之间的死锁。的最大值和默认值为
rpl_stop_replica_timeout
31536000 秒(1 年)。最小值为 2 秒。STOP REPLICA
对此变量的更改对后续语句 生效 。此变量仅影响发出
STOP REPLICA
语句的客户端。当达到超时时,发出命令的客户端返回一条错误消息,指出命令执行未完成。客户端然后停止等待复制 I/O(接收方)和 SQL(应用程序)线程停止,但复制线程继续尝试停止,STOP REPLICA
指令仍然有效。一旦复制线程不再繁忙,STOP REPLICA
就会执行语句并停止副本。 -
命令行格式 --rpl-stop-slave-timeout=#
弃用 8.0.26 系统变量 rpl_stop_slave_timeout
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 31536000
最小值 2
最大值 31536000
单元 秒 从 MySQL 8.0.26 开始, 已弃用, 应改用
rpl_stop_slave_timeout
别名 。rpl_stop_replica_timeout
在 MySQL 8.0.26 之前的版本中,使用rpl_stop_slave_timeout
.STOP REPLICA
您可以通过设置此变量来控制超时前等待 的时间长度(以秒为单位) 。这可用于避免STOP REPLICA
使用与副本的不同客户端连接的其他 SQL 语句之间的死锁。的最大值和默认值为
rpl_stop_slave_timeout
31536000 秒(1 年)。最小值为 2 秒。STOP REPLICA
对此变量的更改对后续语句 生效 。此变量仅影响发出
STOP REPLICA
语句的客户端。当达到超时时,发出命令的客户端返回一条错误消息,指出命令执行未完成。客户端然后停止等待复制 I/O(接收方)和 SQL(应用程序)线程停止,但复制线程继续尝试停止,STOP REPLICA
指令仍然有效。一旦复制线程不再繁忙,STOP REPLICA
就会执行语句并停止副本。 -
命令行格式 --skip-replica-start[={OFF|ON}]
介绍 8.0.26 系统变量 skip_replica_start
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
从 MySQL 8.0.26 开始,使用
skip_replica_start
代替skip_slave_start
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用skip_slave_start
.skip_replica_start
告诉副本服务器在服务器启动时不要启动复制 I/O(接收方)和 SQL(应用程序)线程。要稍后启动线程,请使用START REPLICA
语句。该系统变量是只读的,可以通过使用
PERSIST_ONLY
关键字或 带有语句的@@persist_only
限定符 来设置。SET
命令行选项也设置这个--skip-replica-start
系统变量。您可以使用系统变量代替命令行选项,以允许使用 MySQL Server 的特权结构访问此功能,这样数据库管理员就不需要对操作系统的任何特权访问。 -
命令行格式 --skip-slave-start[={OFF|ON}]
弃用 8.0.26 系统变量 skip_slave_start
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
从 MySQL 8.0.26 开始, 已弃用,应改用
skip_slave_start
别名 。skip_replica_start
在 MySQL 8.0.26 之前的版本中,使用skip_slave_start
.告诉副本服务器在服务器启动时不要启动复制 I/O(接收方)和 SQL(应用程序)线程。要稍后启动线程,请使用
START REPLICA
语句。此系统变量可从 MySQL 8.0.24 获得。它是只读的,可以通过 在语句中使用
PERSIST_ONLY
关键字或@@persist_only
限定符 来设置。SET
命令行选项也设置这个--skip-slave-start
系统变量。您可以使用系统变量代替命令行选项,以允许使用 MySQL Server 的特权结构访问此功能,这样数据库管理员就不需要对操作系统的任何特权访问。 -
命令行格式 --slave-checkpoint-group=#
弃用 8.0.26 系统变量 slave_checkpoint_group
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 512
最小值 32
最大值 524280
块大小 8
从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_checkpoint_group
别名 。replica_checkpoint_group
在 MySQL 8.0.26 之前的版本中,使用slave_checkpoint_group
.slave_checkpoint_group
设置在调用检查点操作以更新其状态之前多线程副本可以处理的最大事务数,如 所示SHOW REPLICA STATUS
。设置此变量对未启用多线程的副本没有影响。设置此变量不会立即生效。变量的状态适用于所有后续START REPLICA
命令。笔记NDB Cluster 目前不支持多线程副本,它会默默地忽略此变量的设置。有关更多信息,请参阅 第 23.7.3 节,“NDB Cluster 复制中的已知问题”。
该变量与
slave_checkpoint_period
系统变量结合使用,当超过任一限制时,将执行检查点,并重置跟踪交易数量和自上次检查点以来经过的时间的计数器。此变量的最小允许值为 32,除非服务器是使用构建的
-DWITH_DEBUG
,在这种情况下最小值为 1。有效值始终为 8 的倍数;您可以将它设置为一个不是这样的倍数的值,但服务器在存储该值之前将其向下舍入为下一个较小的 8 倍数。(例外:调试服务器不执行此类舍入。)无论服务器是如何构建的,默认值为 512,最大允许值为 524280。 -
命令行格式 --slave-checkpoint-period=#
弃用 8.0.26 系统变量 slave_checkpoint_period
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 300
最小值 1
最大值 4294967295
单元 毫秒 从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_checkpoint_period
别名 。replica_checkpoint_period
在 MySQL 8.0.26 之前的版本中,使用slave_checkpoint_period
.slave_checkpoint_period
设置在调用检查点操作以更新多线程副本的状态之前允许通过的最长时间(以毫秒为单位),如 所示SHOW REPLICA STATUS
。设置此变量对未启用多线程的副本没有影响。设置此变量会立即对所有复制通道生效,包括正在运行的通道。笔记NDB Cluster 目前不支持多线程副本,它会默默地忽略此变量的设置。有关更多信息,请参阅 第 23.7.3 节,“NDB Cluster 复制中的已知问题”。
该变量与
slave_checkpoint_group
系统变量结合使用,当超过任一限制时,将执行检查点,并重置跟踪交易数量和自上次检查点以来经过的时间的计数器。此变量的最小允许值为 1,除非服务器是使用 构建的
-DWITH_DEBUG
,在这种情况下最小值为 0。无论服务器是如何构建的,默认值为 300 毫秒,最大可能值为 4294967295 毫秒(约 49.7 天)。 -
命令行格式 --slave-compressed-protocol[={OFF|ON}]
弃用 8.0.18 系统变量 slave_compressed_protocol
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
slave_compressed_protocol
已弃用,从 MySQL 8.0.26 开始,replica_compressed_protocol
应改用别名。在 MySQL 8.0.26 之前的版本中,使用slave_compressed_protocol
.slave_compressed_protocol
如果源和副本都支持,控制是否使用源/副本连接协议的压缩。如果此变量被禁用(默认),连接将被解压缩。对此变量的更改会在后续的连接尝试中生效;这包括在发出一条START REPLICA
语句之后,以及由正在运行的复制 I/O(接收方)线程进行的重新连接。由系统变量激活的二进制日志事务压缩(自 MySQL 8.0.20 起可用)
binlog_transaction_compression
也可用于节省带宽。如果将二进制日志事务压缩与协议压缩结合使用,则协议压缩对数据进行操作的机会较少,但仍可以压缩标头以及那些未压缩的事件和事务有效负载。有关二进制日志事务压缩的更多信息,请参阅 第 5.4.4.5 节,“二进制日志事务压缩”。从 MySQL 8.0.18 开始,如果
slave_compressed_protocol
启用,它优先于任何SOURCE_COMPRESSION_ALGORITHMS
| 为|MASTER_COMPRESSION_ALGORITHMS
指定的选项 陈述。在这种情况下,如果源和副本都支持该算法,则与源的连接将使用压缩。如果 禁用, | 的值 适用。有关更多信息,请参阅 第 4.2.8 节,“连接压缩控制”。CHANGE REPLICATION SOURCE TO
CHANGE MASTER TO
zlib
slave_compressed_protocol
SOURCE_COMPRESSION_ALGORITHMS
MASTER_COMPRESSION_ALGORITHMS
从 MySQL 8.0.18 开始,不推荐使用此系统变量。你应该期望它会在未来版本的 MySQL 中被删除。请参阅 配置传统连接压缩。
-
命令行格式 --slave-exec-mode=mode
系统变量 slave_exec_mode
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 枚举 默认值 IDEMPOTENT
(新开发银行)STRICT
(其他)有效值 STRICT
IDEMPOTENT
从 MySQL 8.0.26 开始, 已弃用,应改用
slave_exec_mode
别名 。replica_exec_mode
在 MySQL 8.0.26 之前的版本中,使用slave_exec_mode
.slave_exec_mode
控制复制线程如何解决复制期间的冲突和错误。IDEMPOTENT
模式导致抑制重复键和未找到键的错误;STRICT
意味着不会发生这种抑制。IDEMPOTENT
mode 旨在用于 NDB Cluster Replication 的多源复制、循环复制和其他一些特殊复制场景。(有关更多信息,请参阅 第 23.7.10 节,“NDB Cluster 复制:双向和循环复制”和 第 23.7.11 节,“NDB Cluster 复制冲突解决”。)NDB Cluster 忽略为明确设置的任何值slave_exec_mode
,并始终将其视为作为IDEMPOTENT
。在 MySQL Server 8.0 中,
STRICT
mode 是默认值。设置此变量对所有复制通道(包括正在运行的通道)立即生效。
对于除 之外的存储引擎
NDB
,IDEMPOTENT
仅当您绝对确定可以安全地忽略重复键错误和未找到键错误时,才应使用模式。它旨在用于采用多源复制或循环复制的 NDB Cluster 的故障转移场景,不建议在其他情况下使用。 -
命令行格式 --slave-load-tmpdir=dir_name
弃用 8.0.26 系统变量 slave_load_tmpdir
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 目录名称 默认值 Value of --tmpdir
从 MySQL 8.0.26 开始, 已弃用,应改用
slave_load_tmpdir
别名 。replica_load_tmpdir
在 MySQL 8.0.26 之前的版本中,使用slave_load_tmpdir
.slave_load_tmpdir
指定副本创建临时文件的目录名称。设置此变量会立即对所有复制通道生效,包括正在运行的通道。默认情况下,变量值等于tmpdir
系统变量的值,或者在未指定该系统变量时应用的默认值。复制 SQL 线程在复制一条
LOAD DATA
语句时,会从中继日志中提取要加载的文件到临时文件中,然后将这些文件加载到表中。如果源上加载的文件很大,则副本上的临时文件也很大。因此,建议使用此选项告诉副本将临时文件放在某个具有大量可用空间的文件系统中的目录中。在那种情况下,中继日志也很大,因此您可能还需要设置relay_log
系统变量以将中继日志放置在该文件系统中。此选项指定的目录应位于基于磁盘的文件系统(而不是基于内存的文件系统)中,以便用于复制
LOAD DATA
语句的临时文件可以在机器重新启动后继续存在。该目录也不应该是在系统启动过程中被操作系统清除的目录。但是,如果临时文件已被删除,复制现在可以在重新启动后继续。 -
命令行格式 --slave-max-allowed-packet=#
弃用 8.0.26 系统变量 slave_max_allowed_packet
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 1073741824
最小值 1024
最大值 1073741824
单元 字节 块大小 1024
从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_max_allowed_packet
别名 。replica_max_allowed_packet
在 MySQL 8.0.26 之前的版本中,使用slave_max_allowed_packet
.slave_max_allowed_packet
设置复制 SQL(应用程序)和 I/O(接收方)线程可以处理的最大数据包大小(以字节为单位)。设置此变量会立即对所有复制通道生效,包括正在运行的通道。添加事件标头后,源可能会写入比其max_allowed_packet
设置更长的二进制日志事件。的设置slave_max_allowed_packet
必须大于max_allowed_packet
源上的设置,以便使用基于行的复制的大型更新不会导致复制失败。这个全局变量的值始终是 1024 的正整数倍;如果您将其设置为某个不是的值,则该值将向下舍入为下一个最高的 1024 倍数,因为它已被存储或使用;设置
slave_max_allowed_packet
为 0 会导致使用 1024。(在所有此类情况下都会发出截断警告。)默认值和最大值为 1073741824 (1 GB);最小值为 1024。 -
命令行格式 --slave-net-timeout=#
弃用 8.0.26 系统变量 slave_net_timeout
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 60
最小值 1
最大值 31536000
单元 秒 从 MySQL 8.0.26 开始, 已弃用,应改用
slave_net_timeout
别名 。replica_net_timeout
在 MySQL 8.0.26 之前的版本中,使用slave_net_timeout
.slave_net_timeout
指定在副本认为连接断开、中止读取并尝试重新连接之前等待更多数据或来自源的心跳信号的秒数。设置此变量不会立即生效。变量的状态适用于所有后续START REPLICA
命令。默认值为 60 秒(一分钟)。第一次重试在超时后立即发生。重试之间的间隔由
SOURCE_CONNECT_RETRY
| 控制。 |MASTER_CONNECT_RETRY
的选项 声明,并且重新连接尝试的次数受 | 限制 选项。CHANGE REPLICATION SOURCE TO
CHANGE MASTER TO
SOURCE_RETRY_COUNT
MASTER_RETRY_COUNT
心跳间隔,如果连接仍然良好,它会停止在没有数据的情况下发生的连接超时,由
SOURCE_HEARTBEAT_PERIOD
| 控制。 |MASTER_HEARTBEAT_PERIOD
的选项 陈述。心跳间隔默认为 值的一半 ,它记录在副本的连接元数据存储库中,并显示在 Performance Schema 表中。请注意,更改值或默认设置CHANGE REPLICATION SOURCE TO
CHANGE MASTER TO
slave_net_timeout
replication_connection_configuration
slave_net_timeout
不会自动更改心跳间隔,无论是已明确设置还是使用先前计算的默认值。如果更改了连接超时,您还必须发出CHANGE REPLICATION SOURCE TO
|CHANGE MASTER TO
将心跳间隔调整为适当的值,使其发生在连接超时之前。 -
命令行格式 --slave-parallel-type=value
弃用 8.0.26 系统变量 slave_parallel_type
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 枚举 默认值(≥ 8.0.27) LOGICAL_CLOCK
默认值(≤ 8.0.26) DATABASE
有效值 DATABASE
LOGICAL_CLOCK
从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_parallel_type
别名 。replica_parallel_type
在 MySQL 8.0.26 之前的版本中,使用slave_parallel_type
.对于多线程副本(
replica_parallel_workers
或slave_parallel_workers
设置为大于 0 的值的副本),slave_parallel_type
指定用于决定允许哪些事务在副本上并行执行的策略。该变量对未启用多线程的副本没有影响。可能的值是:LOGICAL_CLOCK
:作为源上同一二进制日志组提交的一部分的事务在副本上并行应用。事务之间的依赖关系根据它们的时间戳进行跟踪,以在可能的情况下提供额外的并行化。设置此值后,binlog_transaction_dependency_tracking
系统变量可以在源上使用以指定写入集用于并行化而不是时间戳,如果写入集可用于事务并且与时间戳相比提供改进的结果。DATABASE
:更新不同数据库的事务是并行应用的。仅当数据被分区到多个数据库中并在源上独立并同时更新时,此值才适用。必须没有跨数据库约束,因为这样的约束可能会在副本上被违反。
当
replica_preserve_commit_order=ON
orslave_preserve_commit_order=ON
被设置时,你只能使用LOGICAL_CLOCK
. 在 MySQL 8.0.27 之前,DATABASE
是默认的。从MySQL 8.0.27开始,副本服务器默认开启多线程(replica_parallel_workers=4
by default),LOGICAL_CLOCK
也是默认的,设置replica_preserve_commit_order=ON
也是默认的。当您的复制拓扑使用多个级别的副本时,
LOGICAL_CLOCK
对于副本远离源的每个级别,可能会实现较少的并行化。binlog_transaction_dependency_tracking
您可以通过在源上使用来指定在可能的情况下使用写入集而不是时间戳来 减少这种影响 。binlog_transaction_compression
当使用系统变量 启用二进制日志事务压缩时 ,如果replica_parallel_type
或slave_parallel_type
设置为DATABASE
,则在调度事务之前映射所有受事务影响的数据库。DATABASE
与为每个事件映射和调度的未压缩事务相比,将 二进制日志事务压缩与策略一起使用可以降低并行度。 -
命令行格式 --slave-parallel-workers=#
弃用 8.0.26 系统变量 slave_parallel_workers
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值(≥ 8.0.27) 4
默认值(≤ 8.0.26) 0
最小值 0
最大值 1024
从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_parallel_workers
别名 。replica_parallel_workers
在 MySQL 8.0.26 之前的版本中,使用slave_parallel_workers
.slave_parallel_workers
在副本上启用多线程并设置用于并行执行复制事务的应用程序线程数。当该值为大于 0 的数字时,副本是一个多线程副本,具有指定数量的应用程序线程,加上一个协调器线程来管理它们。如果您使用多个复制通道,则每个通道都有此数量的线程。在 MySQL 8.0.27 之前,这个系统变量默认为 0,所以副本默认不是多线程的。从 MySQL 8.0.27 开始,默认值为 4,因此副本默认为多线程。
在副本上启用多线程时支持重试事务。
replica_preserve_commit_order=ON
设置或 设置时slave_preserve_commit_order=ON
,副本上的事务将按照它们在副本的中继日志中出现的相同顺序在副本上外部化。事务在应用程序线程之间分布的方式由replica_parallel_type
(从 MySQL 8.0.26 开始)或slave_parallel_type
(在 MySQL 8.0.26 之前)配置。从 MySQL 8.0.27 开始,这些系统变量也有适合多线程的默认值。要禁用并行执行,请设置
replica_parallel_workers
为 0,这会为副本提供单个应用程序线程而没有协调程序线程。使用此设置,replica_parallel_type
orslave_parallel_type
和replica_preserve_commit_order
orslave_preserve_commit_order
系统变量将不起作用并被忽略。CHANGE REPLICATION SOURCE TO
从 MySQL 8.0.27 开始,如果在副本上启用该选项时禁用并行执行GTID_ONLY
,则副本实际上使用一个并行工作程序来利用重试事务而不访问文件位置的方法。对于一个并行工作者,replica_preserve_commit_order
(slave_preserve_commit_order
) 系统变量也无效。设置
replica_parallel_workers
不会立即生效。变量的状态适用于所有后续START REPLICA
语句。NDB Cluster 当前不支持多线程副本。有关如何 处理此变量的设置的 更多信息,请参阅 第 23.7.3 节,“NDB Cluster 复制中的已知问题” 。
NDB
-
命令行格式 --slave-pending-jobs-size-max=#
弃用 8.0.26 系统变量 slave_pending_jobs_size_max
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值(≥ 8.0.12) 128M
默认值 (8.0.11) 16M
最小值 1024
最大值 16EiB
单元 字节 块大小 1024
从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_pending_jobs_size_max
别名 。replica_pending_jobs_size_max
在 MySQL 8.0.26 之前的版本中,使用slave_pending_jobs_size_max
.对于多线程副本,此变量设置可用于持有尚未应用的事件的应用程序队列的最大内存量(以字节为单位)。设置此变量对未启用多线程的副本没有影响。设置此变量不会立即生效。变量的状态适用于所有后续
START REPLICA
命令。此变量的最小可能值为 1024 字节;默认值为 128MB。最大可能值为 18446744073709551615(16 exbibytes)。在存储之前,不是 1024 字节的精确倍数的值将向下舍入为下一个较低的 1024 字节倍数。
此变量的值是一个软限制,可以设置为与正常工作负载相匹配。如果异常大的事件超过此大小,事务将被暂停,直到所有工作线程的队列都为空,然后再进行处理。所有后续交易都将暂停,直到大笔交易完成。
-
命令行格式 --slave-preserve-commit-order[={OFF|ON}]
弃用 8.0.26 系统变量 slave_preserve_commit_order
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值(≥ 8.0.27) ON
默认值(≤ 8.0.26) OFF
从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_preserve_commit_order
别名 。replica_preserve_commit_order
在 MySQL 8.0.26 之前的版本中,使用slave_preserve_commit_order
.对于多线程副本(
replica_parallel_workers
或slave_parallel_workers
设置为大于 0 的值的副本),设置slave_preserve_commit_order=1
确保事务在副本上执行和提交的顺序与它们在副本的中继日志中出现的顺序相同。这可以防止从副本的中继日志执行的事务序列中出现间隙,并在副本上保留与源上相同的事务历史记录(具有下面列出的限制)。此变量对未启用多线程的副本没有影响。在 MySQL 8.0.27 之前,该系统变量默认为
OFF
,这意味着事务可能会乱序提交。从MySQL 8.0.27开始,副本服务器默认开启多线程(replica_parallel_workers=4
by default),slave_preserve_commit_order=ON
也是默认的,设置slave_parallel_type=LOGICAL_CLOCK
也是默认的。同样从 MySQL 8.0.27 开始,slave_preserve_commit_order
如果设置为 1,则忽略slave_parallel_workers
设置,因为在这种情况下,无论如何都会保留事务的顺序。直到并包括 MySQL 8.0.18,设置
slave_preserve_commit_order=ON
要求在副本上启用二进制日志记录 (log_bin
) 和副本更新日志记录 (log_slave_updates
),这是 MySQL 8.0 的默认设置。从 MySQL 8.0.19 开始,副本上不需要二进制日志记录和副本更新日志记录来设置slave_preserve_commit_order=ON
,并且可以根据需要禁用。在所有版本中,设置都slave_preserve_commit_order=ON
要求slave_parallel_type
设置为LOGICAL_CLOCK
,这 不是MySQL 8.0.27 之前的默认设置。slave_preserve_commit_order
在更改和的值之前slave_parallel_type
,必须停止复制 SQL 线程(对于所有复制通道,如果您使用多个复制通道)。设置时
slave_preserve_commit_order=OFF
,这是默认设置,多线程副本并行应用的事务可能会乱序提交。因此,检查最近执行的事务并不能保证来自源的所有先前事务都已在副本上执行。从副本的中继日志执行的事务序列中可能存在间隙。这对使用多线程副本时的日志记录和恢复有影响。有关更多信息,请参阅 第 17.5.1.34 节,“复制和事务不一致” 。设置时
slave_preserve_commit_order=ON
,正在执行的工作线程会等到所有先前的事务都已提交后再提交。当给定的线程正在等待其他工作线程提交它们的事务时,它将其状态报告为Waiting for preceding transaction to commit
。使用此模式,多线程副本永远不会进入源未处于的状态。这支持使用复制进行读取扩展。请参阅 第 17.4.5 节,“使用复制进行横向扩展”。笔记slave_preserve_commit_order=ON
不防止源二进制日志位置滞后,其中Exec_master_log_pos
落后于已执行事务的位置。请参阅 第 17.5.1.34 节,“复制和事务不一致”。slave_preserve_commit_order=ON
如果副本在其二进制日志上使用过滤器,则不会保留提交顺序和事务历史记录,例如--binlog-do-db
.slave_preserve_commit_order=ON
不保留非事务性 DML 更新的顺序。这些可能会在中继日志中先于它们的事务之前提交,这可能会导致从副本的中继日志中执行的事务序列中出现间隙。MySQL 8.0.19之前 的版本,当对象不存在时,
slave_preserve_commit_order=ON
不保留带子句的语句顺序 。IF EXISTS
这些可能会在中继日志中先于它们的事务之前提交,这可能会导致从副本的中继日志中执行的事务序列中出现间隙。如果正在使用基于语句的复制,并且事务和非事务存储引擎都参与在源上回滚的非 XA 事务,则可能会限制在副本上保留提交顺序。通常,在源上回滚的非 XA 事务不会复制到副本,但在这种特定情况下,事务可能会复制到副本。如果确实发生这种情况,则没有二进制日志记录的多线程副本不会处理事务回滚,
-
命令行格式 --slave-rows-search-algorithms=value
弃用 8.0.18 系统变量 slave_rows_search_algorithms
范围 全球的 动态的 是的 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
是性能最佳的,并且在所有情况下都能正常工作。请参阅 第 17.5.1.27 节,“复制和行搜索”。 -
命令行格式 --slave-skip-errors=name
弃用 8.0.26 系统变量 slave_skip_errors
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 细绳 默认值 OFF
有效值 OFF
[list of error codes]
all
ddl_exist_errors
从 MySQL 8.0.26 开始, 已弃用,应改用
slave_skip_errors
别名 。replica_skip_errors
在 MySQL 8.0.26 之前的版本中,使用slave_skip_errors
.通常,当副本发生错误时,复制会停止,这使您有机会手动解决数据中的不一致问题。当语句返回变量值中列出的任何错误时,此变量会导致复制 SQL 线程继续复制。
-
命令行格式 --replica-skip-errors=name
介绍 8.0.26 系统变量 replica_skip_errors
范围 全球的 动态的 不 SET_VAR
提示适用不 类型 细绳 默认值 OFF
有效值 OFF
[list of error codes]
all
ddl_exist_errors
从 MySQL 8.0.26 开始,使用
replica_skip_errors
代替slave_skip_errors
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用slave_skip_errors
.通常,当副本发生错误时,复制会停止,这使您有机会手动解决数据中的不一致问题。当语句返回变量值中列出的任何错误时,此变量会导致复制 SQL 线程继续复制。
-
命令行格式 --slave-sql-verify-checksum[={OFF|ON}]
弃用 8.0.26 系统变量 slave_sql_verify_checksum
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 ON
从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_sql_verify_checksum
别名 。replica_sql_verify_checksum
在 MySQL 8.0.26 之前的版本中,使用slave_sql_verify_checksum
.slave_sql_verify_checksum
使复制 SQL 线程使用从中继日志读取的校验和来验证数据。如果不匹配,副本会因错误而停止。设置此变量会立即对所有复制通道生效,包括正在运行的通道。笔记当通过网络接受事件时,复制 I/O(接收方)线程总是尽可能读取校验和。
-
命令行格式 --slave-transaction-retries=#
弃用 8.0.26 系统变量 slave_transaction_retries
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 10
最小值 0
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_transaction_retries
别名 。replica_transaction_retries
在 MySQL 8.0.26 之前的版本中,使用slave_transaction_retries
.slave_transaction_retries
设置单线程或多线程副本上复制 SQL 线程在停止前自动重试失败事务的最大次数。设置此变量会立即对所有复制通道生效,包括正在运行的通道。默认值为 10。将变量设置为 0 将禁用事务的自动重试。InnoDB
如果复制 SQL 线程由于死锁或因为事务的执行时间超过InnoDB
sinnodb_lock_wait_timeout
或NDB
sTransactionDeadlockDetectionTimeout
或 而无法执行事务,它会 在因错误而停止之前TransactionInactiveTimeout
自动重试 times。slave_transaction_retries
不会重试具有非临时错误的事务。Performance Schema 表 在列中
replication_applier_status
显示了每个复制通道上发生的重试次数COUNT_TRANSACTIONS_RETRIES
。Performance Schema 表replication_applier_status_by_worker
显示了单线程或多线程副本上各个应用程序线程重试事务的详细信息,并标识了导致最后一个事务和当前正在进行的事务被重试的错误。 -
命令行格式 --slave-type-conversions=set
弃用 8.0.26 系统变量 slave_type_conversions
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 放 默认值 有效值 ALL_LOSSY
ALL_NON_LOSSY
ALL_SIGNED
ALL_UNSIGNED
从 MySQL 8.0.26 开始, 已弃用, 应改用
slave_type_conversions
别名 。replica_type_conversions
在 MySQL 8.0.26 之前的版本中,使用slave_type_conversions
.slave_type_conversions
使用基于行的复制时,控制对副本有效的类型转换模式。它的值是一个逗号分隔的集合,由列表中的零个或多个元素组成:ALL_LOSSY
,ALL_NON_LOSSY
,ALL_SIGNED
,ALL_UNSIGNED
。将此变量设置为空字符串以禁止源和副本之间的类型转换。设置此变量会立即对所有复制通道生效,包括正在运行的通道。有关适用于基于行的复制中的属性提升和降级的类型转换模式的其他信息,请参阅 基于行的复制:属性提升和降级。
-
介绍 8.0.26 系统变量 sql_replica_skip_counter
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 0
最小值 0
最大值 4294967295
从 MySQL 8.0.26 开始,使用
sql_replica_skip_counter
代替sql_slave_skip_counter
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用sql_slave_skip_counter
.sql_replica_skip_counter
指定副本应跳过的来自源的事件数。设置选项不会立即生效。该变量适用于下START REPLICA
一条语句;下START REPLICA
一条语句也将值改回 0。当此变量设置为非零值并且配置了多个复制通道时,该START REPLICA
语句只能与该 子句一起使用。FOR CHANNEL
channel
此选项与基于 GTID 的复制不兼容,并且在设置时不得设置为非零值
gtid_mode=ON
。如果在使用 GTID 时需要跳过事务,请改用gtid_executed
源代码。如果您使用语句 的ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
选项在复制通道上启用了 GTID 分配 ,则可用。请参阅 第 17.1.7.3 节,“跳过事务”。CHANGE REPLICATION SOURCE TO
sql_replica_skip_counter
重要的如果跳过通过设置此变量指定的事件数会导致副本从事件组的中间开始,则副本将继续跳过,直到它找到下一个事件组的开头并从该点开始。有关详细信息,请参阅 第 17.1.7.3 节,“跳过事务”。
-
弃用 8.0.26 系统变量 sql_slave_skip_counter
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 0
最小值 0
最大值 4294967295
从 MySQL 8.0.26 开始, 已弃用, 应改用
sql_slave_skip_counter
别名 。sql_replica_skip_counter
在 MySQL 8.0.26 之前的版本中,使用sql_slave_skip_counter
.sql_slave_skip_counter
指定副本应跳过的来自源的事件数。设置选项不会立即生效。该变量适用于下START REPLICA
一条语句;下START REPLICA
一条语句也将值改回 0。当此变量设置为非零值并且配置了多个复制通道时,该START REPLICA
语句只能与该 子句一起使用。FOR CHANNEL
channel
此选项与基于 GTID 的复制不兼容,并且在设置时不得设置为非零值
gtid_mode=ON
。如果在使用 GTID 时需要跳过事务,请改用gtid_executed
源代码。如果您使用语句 的ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
选项在复制通道上启用了 GTID 分配 ,则可用。请参阅 第 17.1.7.3 节,“跳过事务”。CHANGE REPLICATION SOURCE TO
sql_slave_skip_counter
重要的如果跳过通过设置此变量指定的事件数会导致副本从事件组的中间开始,则副本将继续跳过,直到它找到下一个事件组的开头并从该点开始。有关详细信息,请参阅 第 17.1.7.3 节,“跳过事务”。
-
命令行格式 --sync-master-info=#
弃用 8.0.26 系统变量 sync_master_info
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 10000
最小值 0
最大值 4294967295
从 MySQL 8.0.26 开始, 已弃用,应改用
sync_master_info
别名 。sync_source_info
在 MySQL 8.0.26 之前的版本中,使用sync_master_info
.sync_master_info
指定副本更新连接元数据存储库之后的事件数。当连接元数据存储库存储为InnoDB
表时(这是 MySQL 8.0 的默认设置),它会在发生此事件数后更新。如果连接元数据存储库存储为一个文件,这在 MySQL 8.0 中已弃用,则副本会在发生此事件数后将其master.info
文件同步到磁盘(使用fdatasync()
)。默认值为 10000,零值意味着存储库永远不会更新。设置此变量会立即对所有复制通道生效,包括正在运行的通道。 -
命令行格式 --sync-relay-log=#
系统变量 sync_relay_log
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 10000
最小值 0
最大值 4294967295
如果此变量的值大于 0,则
fdatasync()
在每个sync_relay_log
事件写入中继日志后,MySQL 服务器将其中继日志同步到磁盘(使用)。设置此变量会立即对所有复制通道生效,包括正在运行的通道。设置
sync_relay_log
为 0 会导致不对磁盘进行同步;在这种情况下,服务器依靠操作系统不时刷新中继日志的内容,就像任何其他文件一样。值 1 是最安全的选择,因为在意外停止的情况下,您最多会从中继日志中丢失一个事件。然而,它也是最慢的选择(除非磁盘有电池备份缓存,这使得同步非常快)。有关对意外停止最具弹性的副本设置组合的信息,请参阅 第 17.4.2 节,“处理副本的意外停止”。
-
命令行格式 --sync-relay-log-info=#
系统变量 sync_relay_log_info
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 10000
最小值 0
最大值 4294967295
副本更新应用程序元数据存储库之后的事务数。当 applier 元数据存储库存储为
InnoDB
表时,这是 MySQL 8.0 的默认设置,它会在每个事务后更新,并且忽略此系统变量。如果 applier 元数据存储库存储为文件,这在 MySQL 8.0 中已弃用,则副本 在该事务数后将其relay-log.info
文件同步到磁盘(使用 )。fdatasync()
默认值为sync_relay_log_info
为 10000,零值表示文件内容仅由操作系统刷新。设置此变量会立即对所有复制通道生效,包括正在运行的通道。 -
命令行格式 --sync-source-info=#
介绍 8.0.26 系统变量 sync_source_info
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 整数 默认值 10000
最小值 0
最大值 4294967295
从 MySQL 8.0.26 开始,使用
sync_source_info
代替sync_master_info
,该版本已弃用。在 MySQL 8.0.26 之前的版本中,使用sync_source_info
.sync_source_info
指定副本更新连接元数据存储库之后的事件数。当连接元数据存储库存储为InnoDB
表时(这是 MySQL 8.0 的默认设置),它会在发生此事件数后更新。如果连接元数据存储库存储为一个文件,这在 MySQL 8.0 中已弃用,则副本会在发生此事件数后将其master.info
文件同步到磁盘(使用fdatasync()
)。默认值为 10000,零值意味着存储库永远不会更新。设置此变量会立即对所有复制通道生效,包括正在运行的通道。 -
命令行格式 --terminology-use-previous=#
介绍 8.0.26 系统变量 terminology_use_previous
范围 全局,会话 动态的 是的 SET_VAR
提示适用不 类型 枚举 默认值 NONE
有效值 NONE
BEFORE_8_0_26
在 MySQL 8.0.26 中,对包含术语 “ master ”的检测名称进行了不兼容的更改,更改为 “ source ”,“ slave ”更改为“ replica ”,以及“ mts ” (表示“ multithreaded slave ”) ),改为“ mta ”(表示“多线程应用程序”). 使用这些工具名称的监视工具可能会受到影响。如果不兼容的更改对您有影响,请将
terminology_use_previous
系统变量设置为BEFORE_8_0_26
以使 MySQL 服务器使用先前列表中指定的对象的旧版本名称。这使得依赖旧名称的监视工具能够继续工作,直到它们可以更新为使用新名称。将
terminology_use_previous
具有会话范围的系统变量设置为支持单个函数,或将全局范围设置为所有新会话的默认值。使用全局范围时,慢速查询日志包含名称的旧版本。受影响的仪器名称在以下列表中给出。
terminology_use_previous
系统变量只影响这些项目。 它不影响 MySQL 8.0.26 中也引入的系统变量、状态变量和命令行选项的新别名,这些在设置时仍然可以使用。检测锁(互斥锁),在带有前缀的
mutex_instances
Performanceevents_waits_*
Schema 表中 可见wait/synch/mutex/
读/写锁,在带有前缀的
rwlock_instances
和events_waits_*
Performance Schema 表中 可见wait/synch/rwlock/
检测条件变量,在带有前缀的
cond_instances
Performanceevents_waits_*
Schema 表中 可见wait/synch/cond/
检测内存分配,在
memory_summary_*
带有前缀的性能模式表中可见memory/sql/
threads
线程名称,在带有前缀 的性能模式表中可见thread/sql/
events_stages_*
线程阶段,在带有前缀的性能模式表 中可见,在和 性能模式表stage/sql/
中没有前缀,语句的输出,信息模式 表和慢查询日志threads
processlist
SHOW PROCESSLIST
processlist
events_statements_history*
线程命令,在和events_statements_summary_*_by_event_name
Performance Schema 表中 可见, 前缀为, 在 Performance Schema 表statement/com/
中不带前缀,语句的输出,Information Schema 表,以及 语句 的输出threads
processlist
SHOW PROCESSLIST
processlist
SHOW REPLICA STATUS