19.1.6.3 副本服务器选项和变量
本节解释了副本服务器的选项和系统变量,内容包括:
可以在命令行或选项文件中指定选项。许多选项可以在服务器运行时使用 CHANGE REPLICATION SOURCE TO
语句设置。使用 SET
指定系统变量值。
服务器ID. 在源和每个副本上,您必须设置 server_id
系统变量,以在范围从 1 到 232 − 1 中建立唯一的复制 ID。 “唯一” 意味着每个 ID 都不能与任何其他源或副本在复制拓扑结构中使用的 ID 相同。例如 my.cnf
文件:
[mysqld]
server-id=3
本节解释了副本服务器启动选项。许多这些选项可以在服务器运行时使用 CHANGE REPLICATION SOURCE TO
语句设置。其他选项,例如 --replicate-*
,只能在副本服务器启动时设置。复制相关的系统变量将在本节后面讨论。
-
Command-Line Format --master-retry-count=#
Deprecated 是 Type 整数 Default Value 10
Minimum Value 0
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
这个选项已经弃用,预计将在未来的 MySQL 发布中删除。请使用
CHANGE REPLICATION SOURCE TO
语句的SOURCE_RETRY_COUNT
选项,代替。 -
Command-Line Format --max-relay-log-size=#
System Variable max_relay_log_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 1073741824
Unit 字节 Block Size 4096
服务器自动旋转relay日志文件的大小。如果这个值非零,relay日志将在大小超过这个值时自动旋转。如果这个值为零(默认值),relay日志旋转的大小将由
max_binlog_size
的值确定。更多信息,请见第19.2.4.1节,“relay日志”。 -
Command-Line Format --relay-log-purge[={OFF|ON}]
System Variable relay_log_purge
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
禁用或启用自动清除relay日志的功能,以便在它们不再需要时尽快清除。默认值为1(启用)。这是一个全局变量,可以动态地使用
SET GLOBAL relay_log_purge =
更改。禁用relay日志清除时启用N
--relay-log-recovery
选项可能会影响数据一致性,因此不建议使用。 -
Command-Line Format --relay-log-space-limit=#
System Variable relay_log_space_limit
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 18446744073709551615
Unit 字节 该选项将对所有 Relay 日志的总大小(以字节为单位)设置上限。值为 0 表示““无限制””。这对于具有有限磁盘空间的副本服务器主机非常有用。当达到限制时,I/O(接收)线程将停止从源服务器读取二进制日志事件,直到 SQL 线程赶上并删除一些未使用的 Relay 日志。请注意,这个限制不是绝对的:在某些情况下,SQL(应用程序)线程需要更多事件才能删除 Relay 日志。在这种情况下,接收线程将超过限制,直到应用程序线程可以删除一些 Relay 日志为止。您不应该将
--relay-log-space-limit
设置为小于--max-relay-log-size
(或--max-binlog-size
如果--max-relay-log-size
为 0)。在这种情况下,有可能接收线程等待空闲空间,因为--relay-log-space-limit
避免了接收线程,但应用程序线程没有 Relay 日志可以purge,无法满足接收线程的需求。这迫使接收线程忽略--relay-log-space-limit
一段时间。 -
Command-Line Format --replicate-do-db=name
Type String 使用数据库名称创建复制过滤器。这种过滤器也可以使用
CHANGE REPLICATION FILTER REPLICATE_DO_DB
创建。该选项支持通道特定的复制过滤器,启用多源副本使用特定过滤器对不同源。要在通道名为
channel_1
上配置通道特定的复制过滤器,使用--replicate-do-db:
。在这种情况下,第一个冒号被解释为分隔符,后续的冒号被解释为字面上的冒号。见 Section 19.2.5.4, “Replication Channel Based Filters” 获取更多信息。channel_1
:db_name
Note全局复制过滤器不能在 MySQL 服务器实例上使用,该实例配置了 Group Replication,因为在某些服务器上 Filtering 交易将使得组无法达成一致状态。通道特定的复制过滤器可以在不直接涉及 Group Replication 的副本通道上使用,例如在组成员同时作为源服务器的副本,但不能在
group_replication_applier
或group_replication_recovery
通道上使用。本复制过滤器的精确效果取决于是否使用语句级别或行级别复制。
语句级别复制。 告诉复制 SQL 线程将复制限制到语句中,其中默认数据库(即由
USE
语句选择的数据库)是db_name
。要指定多个数据库,请使用该选项多次,每个数据库一次;然而,这样做不会复制跨数据库语句,如UPDATE
,而当前数据库或无数据库被选择。some_db.some_table
SET foo='bar'Warning要指定多个数据库,您必须 使用多个该选项。因为数据库名称可以包含逗号,如果您提供逗号分隔列表,则该列表将被视为单个数据库名称。
使用语句级别复制时的一个示例:如果复制开始时使用了
--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;
在复制中,
february
表在sales
数据库中被更改,以响应UPDATE
语句;这无论当前数据库是否被选择。然而,在使用行级别复制和--replicate-do-db=sales
时,以下语句在复制中无效:USE prices; UPDATE prices.march SET amount=amount-25;
即使语句
USE prices
被更改为USE sales
,UPDATE
语句的效果仍然不会被复制。在语句级别复制和行级别复制之间另一个重要的差异是关于多个数据库中的语句的处理。假设复制服务器启动时使用了
--replicate-do-db=db1
,然后在源服务器上执行以下语句:USE db1; UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
如果使用语句级别复制,那么在复制服务器上Both表都将被更新。然而,在使用行级别复制时,只有
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
指定的数据库中表被改变,而默认数据库的选择对此行为无影响。如果您需要跨数据库更新,请使用
--replicate-wild-do-table=
代替。见第19.2.5节,“服务器评估复制过滤规则”。db_name
.%Note这个选项对复制的影响与
--binlog-do-db
对二进制日志的影响相同,--replicate-do-db
对复制行为的影响与日志格式对--binlog-do-db
的行为相同。 -
Command-Line Format --replicate-ignore-db=name
Type String 创建一个使用数据库名称的复制过滤器。这些过滤器也可以使用
CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB
创建。这个选项支持通道特定的复制过滤器,启用多源复制使用特定的过滤器来处理不同的源。要在名为
channel_1
的通道上配置通道特定的复制过滤器,使用--replicate-ignore-db:
。在这种情况下,第一个冒号被解释为分隔符,后续的冒号是字面上的冒号。请参阅第19.2.5.4节,“通道基于的复制过滤器”获取更多信息。channel_1
:db_name
Note全局复制过滤器不能在配置了 Group Replication 的 MySQL 服务器实例上使用,因为在某些服务器上 filtering 交易将使得组无法达成一致的状态。通道特定的复制过滤器可以在不直接涉及 Group Replication 的复制通道上使用,例如,在一个组成员同时作为源服务器的副本时。它们不能在
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;
The
UPDATE
语句是在这种情况下被复制,因为--replicate-ignore-db
只对默认数据库(由USE
语句确定的)生效。由于语句中明确指定了sales
数据库,因此语句没有被过滤。然而,在使用行级别复制时,UPDATE
语句的效果不会被传播到副本中,副本的sales.january
表保持不变;在这种情况下,--replicate-ignore-db=sales
会使副本忽略来自源的sales
数据库中的所有表的更改。您不应该使用这个选项,如果您使用跨数据库更新且不想这些更新被复制。请参阅第19.2.5节,“服务器评估复制过滤规则”。
如果您需要跨数据库更新工作,请使用
--replicate-wild-ignore-table=
alternatively。请参阅第19.2.5节,“服务器评估复制过滤规则”。db_name
.%Note这个选项对复制的影响与
--binlog-ignore-db
对二进制日志的影响相同,--replicate-ignore-db
对复制行为的影响与日志格式对--binlog-ignore-db
的影响相同。 -
--replicate-do-table=
db_name.tbl_name
Command-Line Format --replicate-do-table=name
Type String 创建复制过滤器,告诉复制 SQL 线程将复制的限制到指定的表中。要指定多个表,使用该选项多次,每个表一次。这适用于跨数据库更新和默认数据库更新,相比于
--replicate-do-db
。请参阅第19.2.5节,“服务器评估复制过滤规则”。您还可以使用CHANGE REPLICATION FILTER REPLICATE_DO_TABLE
语句创建该过滤器。该选项支持通道特定的复制过滤器,启用多源复制使用特定的过滤器来过滤来自不同源的数据。要在名为
channel_1
的通道上配置通道特定的复制过滤器,使用--replicate-do-table:
。在这种情况下,第一个冒号被解释为分隔符,后续的冒号是字面上的冒号。请参阅第19.2.5.4节,“通道基于的过滤器”以获取更多信息。channel_1
:db_name.tbl_name
Note全球复制过滤器不能在配置为 Group Replication 的 MySQL 服务器实例上使用,因为在某些服务器上过滤事务将使得组无法达成一致状态。通道特定的复制过滤器可以在不直接与 Group Replication 相关的复制通道上使用,例如在组成员同时作为源服务器的副本时。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。该选项仅影响对表的语句。它不影响只对其他数据库对象的语句,例如存储程序。要过滤操作存储程序的语句,使用一个或多个
--replicate-*-db
选项。 -
--replicate-ignore-table=
db_name.tbl_name
Command-Line Format --replicate-ignore-table=name
Type String 创建复制过滤器,告诉复制 SQL 线程不要复制任何更新指定表的语句,即使其他表也可能被更新。要指定多个表忽略,使用该选项多次,每个表一次。这适用于跨数据库更新,相比于
--replicate-ignore-db
。请参阅第19.2.5节,“服务器评估复制过滤规则”。您还可以使用CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE
语句创建该过滤器。该选项支持通道特定的复制过滤器,启用多源复制使用特定的过滤器来处理不同源。要在名为
channel_1
的通道上配置通道特定的复制过滤器,使用--replicate-ignore-table:
。在这种情况下,第一个冒号被解释为分隔符,后续的冒号是字面上的冒号。见第19.2.5.4节,“通道基于的过滤器”了解更多信息。channel_1
:db_name.tbl_name
Note不能在 MySQL 服务器实例上使用全局复制过滤器,因为在某些服务器上过滤事务将使得组无法达成一致状态。通道特定的复制过滤器可以在不直接与组复制相关的复制通道上使用,例如,组成员也作为外部源的副本。它们不能用于
group_replication_applier
或group_replication_recovery
通道上。该选项只影响对表的语句,不影响对其他数据库对象的语句,例如存储程序。要过滤操作存储程序的语句,使用一个或多个
--replicate-*-db
选项。 -
--replicate-rewrite-db=
from_name
->to_name
Command-Line Format --replicate-rewrite-db=old_name->new_name
Type 字符串 告诉副本创建一个复制过滤器,翻译指定的数据库到
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
语句所指定的,regardless of the binary logging format.为了确保重写产生预期的结果,特别是在与其他复制过滤选项组合使用时,遵循以下建议使用
--replicate-rewrite-db
选项:如果遵循这些建议,那么使用
--replicate-rewrite-db
选项与表级复制过滤选项,如--replicate-do-table
,是安全的。这个选项支持通道特定的复制过滤,启用多源副本使用特定的过滤器来过滤来自不同源的数据。指定通道名称,后跟一个冒号,然后是过滤器规范。第一个冒号被解释为分隔符,任何后续的冒号被解释为字面上的冒号。例如,要配置一个通道特定的复制过滤器在名为
channel_1
的通道上,使用:$> mysqld --replicate-rewrite-db=channel_1:db_name1->db_name2
如果您使用冒号,但不指定通道名称,那么该选项将配置默认复制通道的过滤器。见Section 19.2.5.4,“Replication Channel Based Filters”了解更多信息。
Note全球复制过滤器不能在 MySQL 服务器实例上使用,该实例已配置为 Group Replication,因为在某些服务器上 filtering 交易将使群组无法达成一致状态。可以在不直接涉及 Group Replication 的复制通道上使用 channel 特定的复制过滤器,例如,在群组成员同时作为外部源的副本时。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。 -
Command-Line Format --replicate-same-server-id[={OFF|ON}]
Type 布尔值 Default Value OFF
这个选项适用于副本。默认情况下,0 (
FALSE
)。将这个选项设置为 1 (TRUE
),副本不跳过事件,该事件的服务器 ID 与副本的服务器 ID 相同。这一设置通常只在罕见的配置中有用。在副本上启用二进制日志记录时,组合
--replicate-same-server-id
和--log-replica-updates
选项可能会在副本是环形复制拓扑的一部分时导致无限循环。如果服务器是环形复制拓扑的一部分,启用了二进制日志记录,并且启用了副本更新记录,那么使用全局事务标识符 (GTIDs) 可以避免这种情况,因为它可以跳过已经应用的事务。如果gtid_mode=ON
在副本上设置,可以在启动服务器时使用这两个选项,但是不能在服务器运行时更改 GTID 模式。如果设置了其他 GTID 模式,服务器将无法启动。默认情况下,复制 I/O (接收器) 线程不将具有副本服务器 ID 的二进制日志事件写入到中继日志中(这项优化可以帮助节省磁盘空间)。如果您想使用
--replicate-same-server-id
,请在启动副本时使用这个选项,然后在副本读取您想要 replication SQL (applier) 线程执行的事件之前。 -
--replicate-wild-do-table=
db_name.tbl_name
Command-Line Format --replicate-wild-do-table=name
Type 字符串 创建一个复制过滤器,告诉复制 SQL(applier)线程将复制限制到语句,其中任何更新的表都匹配指定的数据库和表名模式。模式可以包含
%
和_
通配符字符,这些字符的含义与LIKE
模式匹配操作符相同。要指定多个表,使用该选项多次,每个表一次。这适用于跨数据库更新。见第19.2.5节,“服务器如何评估复制过滤规则”。您还可以使用CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE
语句创建这样的过滤器。该选项支持通道特定的复制过滤器,启用多源复制使用特定过滤器来filter来自不同源的数据。要在名为
channel_1
的通道上配置通道特定的复制过滤器,使用--replicate-wild-do-table:
。在这种情况下,第一个冒号被解释为分隔符,后续的冒号是字面上的冒号。见第19.2.5.4节,“Replication Channel Based Filters”了解更多信息。channel_1
:db_name.tbl_name
Important全局复制过滤器不能在配置为Group Replication的MySQL服务器实例上使用,因为在某些服务器上过滤事务将使得组无法达成一致的状态。通道特定的复制过滤器可以在不直接涉及Group Replication的复制通道上使用,如一个组成员同时作为一个源服务器的副本,但不能在
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%
。Important表级复制过滤器仅应用于查询中明确提到的表,并且不应用于隐式更新的表。例如,一个
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
Command-Line Format --replicate-wild-ignore-table=name
Type String 创建一个复制过滤器,防止复制语句中的任何表匹配给定的通配符模式。要指定多个表忽略,可以使用该选项多次,每次为一个表。这适用于跨数据库更新。见Section 19.2.5,“How Servers Evaluate Replication Filtering Rules”。您也可以通过
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE
语句创建这样的过滤器。该选项支持通道特定的复制过滤器,启用多源复制使用特定过滤器对不同源进行过滤。要在名为
channel_1
的通道上配置通道特定的复制过滤器,使用--replicate-wild-ignore:
。在这种情况下,第一个冒号被解释为分隔符,后续的冒号被解释为字面上的冒号。请参阅第19.2.5.4节,“通道基于的过滤器”获取更多信息。channel_1
:db_name.tbl_name
Important不能在 MySQL 服务器实例上使用全局复制过滤器,该实例已配置为 Group Replication,因为在某些服务器上过滤事务将使得组无法达成一致状态。通道特定的复制过滤器可以在不直接与 Group Replication 相关的复制通道上使用,例如在组成员同时作为复制源的外部源。它们不能在
group_replication_applier
或group_replication_recovery
通道上使用。例如,
--replicate-wild-ignore-table=foo%.bar%
不会复制使用表名以foo
开头,表名以bar
开头的更新。有关匹配规则的信息,请参阅--replicate-wild-do-table
选项的描述。通道特定过滤器的规则与--replicate-wild-ignore-table
相同。Important表级别复制过滤器仅应用于明确提到的和操作的表,不应用于隐式更新的表。例如,一个
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';
-
Command-Line Format --skip-replica-start[={OFF|ON}]
System Variable skip_replica_start
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
--skip-replica-start
告诉副本服务器在启动时不启动复制I/O(receiver)和SQL(applier)线程。要在后续启动线程,请使用START REPLICA
语句。您可以使用
skip_replica_start
系统变量取代命令行选项,以便使用 MySQL 服务器的权限结构,避免数据库管理员需要操作系统的特权访问。 -
Command-Line Format --skip-slave-start[={OFF|ON}]
Deprecated 是 System Variable skip_slave_start
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
已弃用的别名
--skip-replica-start
。 -
--slave-skip-errors=[
err_code1
,err_code2
,...|all|ddl_exist_errors]Command-Line Format --slave-skip-errors=name
Deprecated 是 System Variable slave_skip_errors
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value OFF
Valid Values OFF
[list of error codes]
all
ddl_exist_errors
已弃用的同义词
--replica-skip-errors
。 -
--slave-sql-verify-checksum={0|1}
Command-Line Format --slave-sql-verify-checksum[={OFF|ON}]
Type Boolean Default Value ON
已弃用的synonym,等同于
--replica-sql-verify-checksum
以下是控制副本服务器的系统变量列表。它们可以在服务器启动时设置,并且一些变量可以在运行时使用SET
。副本服务器选项列表在本节前面已经列出。
-
Command-Line Format --init-replica=name
System Variable init_replica
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 init_replica
类似于init_connect
,但是一旦副本服务器每次启动时执行的字符串。字符串的格式与init_connect
变量相同。该变量的设置将对后续START REPLICA
语句生效。Note副本SQL线程在执行
init_replica
之前将向客户端发送确认。因此,不保证init_replica
在START REPLICA
语句返回时已经执行。请参阅Section 15.4.2.4, “START REPLICA Statement”获取更多信息。 -
Command-Line Format --init-slave=name
Deprecated 是 System Variable init_slave
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 已弃用的别名,为
init_replica
。 -
Command-Line Format --log-slow-replica-statements[={OFF|ON}]
System Variable log_slow_replica_statements
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
当慢查询日志启用时,
log_slow_replica_statements
将记录在复制服务器上执行时间超过long_query_time
秒的查询。注意,如果使用行级别复制(binlog_format=ROW
),log_slow_replica_statements
无效。查询仅在被记录在复制服务器的慢查询日志中,当它们在二进制日志中以语句格式记录时,即当binlog_format=STATEMENT
设置时或当binlog_format=MIXED
设置时且语句以语句格式记录时。以行格式记录的慢查询,即使log_slow_replica_statements
启用,也不会被添加到复制服务器的慢查询日志中。设置
log_slow_replica_statements
无法立即生效。该变量的状态将在所有后续START REPLICA
语句中生效。另外,请注意long_query_time
的全局设置将在 SQL 线程的整个生命周期中生效。如果您更改该设置,必须停止并重新启动复制 SQL 线程以实现更改(例如,通过STOP REPLICA
和START REPLICA
语句,使用SQL_THREAD
选项)。 -
Command-Line Format --log-slow-slave-statements[={OFF|ON}]
Deprecated 是 System Variable log_slow_slave_statements
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
已弃用别名,为
log_slow_replica_statements
。 -
Command-Line Format --max-relay-log-size=#
System Variable max_relay_log_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 1073741824
Unit 字节 Block Size 4096
如果复制服务器将写入到其relay log时,当前日志文件大小超过该变量的值,服务器将旋转relay logs(关闭当前文件,打开下一个文件)。如果
max_relay_log_size
为0,服务器将使用max_binlog_size
对二进制日志和relay log进行限制。如果max_relay_log_size
大于0,它将限制relay log的大小,从而使得可以为两个日志设置不同的大小。您必须将max_relay_log_size
设置为4096字节到1GB之间(包括),或设置为0。默认值为0。请参见第19.2.3节,“Replication Threads”。 -
Command-Line Format --relay-log=file_name
System Variable relay_log
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 文件名 relay日志的基础名称。对于默认复制通道,relay日志的默认基础名称为
。对于非默认复制通道,relay日志的默认基础名称为host_name
-relay-bin
,其中host_name
-relay-bin-channel
channel
是复制通道的名称,该名称记录在该relay日志中。服务器将文件写入到数据目录中,除非基础名称以绝对路径名开头,以指定不同的目录。服务器将按顺序创建relay日志文件,通过将基础名称与数字后缀组合。
relay日志和relay日志索引在复制服务器上不能与二进制日志和二进制日志索引相同,后者由
--log-bin
和--log-bin-index
选项指定。服务器将出现错误信息并且不启动,如果binary log和relay log文件基础名称相同。由于 MySQL 服务器选项解析的方式,如果您在服务器启动时指定该变量,您必须提供一个值;默认的基础名称仅在未实际指定时使用。如果您在服务器启动时指定
relay_log
系统变量,但未指定值,可能会出现不期望的行为;这种行为取决于其他选项、它们的顺序、是否在命令行或选项文件中指定。有关 MySQL 处理服务器选项的更多信息,请见第6.2.2节,“指定程序选项”。如果您指定该变量,指定的值也将用作relay log索引文件的基础名称。您可以使用
relay_log_index
系统变量来override这个行为。当服务器读取索引文件时,它将检查索引文件中的条目是否包含相对路径。如果是这样,它将相对路径的部分替换为使用
relay_log
系统变量设置的绝对路径。绝对路径保持不变;在这种情况下,索引文件必须手动编辑以启用新的路径或路径。您可能会发现
relay_log
系统变量有助于执行以下任务:-
创建名称独立于主机名的relay日志。
-
如果您需要将relay日志放在数据目录以外的某个位置,因为您的relay日志 tend to be very large 和您不想减少
max_relay_log_size
。 -
以提高速度通过在磁盘之间进行负载均衡。
您可以从
relay_log_basename
系统变量中获取relay日志文件名(和路径)。 -
-
System Variable relay_log_basename
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type File name Default Value datadir + '/' + hostname + '-relay-bin'
Holds the base name and complete path to the relay log file. The maximum variable length is 256. This variable is set by the server and is read only.
-
Command-Line Format --relay-log-index=file_name
System Variable relay_log_index
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type File name Default Value *host_name*-relay-bin.index
存储中继日志索引文件的名称。最大变量长度为256。如果您不指定该变量,但指定了
relay_log
系统变量,它的值将被用作默认的中继日志索引文件的基础名称。如果relay_log
也未指定,那么对于默认复制通道,缺省名称为
,使用主机名称。如果非默认复制通道,那么缺省名称为host_name
-relay-bin.index
,其中host_name
-relay-bin-channel
.indexchannel
是记录在该中继日志索引中的复制通道名称。中继日志文件的缺省位置是数据目录,或者使用
relay_log
系统变量指定的其他位置。您可以使用relay_log_index
系统变量指定一个不同的目录,通过在基础名称前添加一个绝对路径名来指定。中继日志和中继日志索引在复制服务器上不能与二进制日志和二进制日志索引的名称相同,这些名称由
--log-bin
和--log-bin-index
选项指定的。如果中继日志和二进制日志文件基础名称相同,服务器将显示错误信息并不能启动。由于MySQL解析服务器选项的方式,如果您在服务器启动时指定该变量,您必须提供一个值;缺省基础名称仅在实际指定该选项时使用。如果您在服务器启动时指定
relay_log_index
系统变量而不指定值,可能会出现不期望的行为,这种行为取决于其他选项、它们的顺序和是否在命令行或选项文件中指定。有关MySQL处理服务器选项的更多信息,请参阅第6.2.2节,“Specifying Program Options”。 -
Command-Line Format --relay-log-purge[={OFF|ON}]
System Variable relay_log_purge
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
禁用或启用自动清除中继日志文件的功能,直到它们不再需要。缺省值为1(
ON
)。 -
Command-Line Format --relay-log-recovery[={OFF|ON}]
System Variable relay_log_recovery
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
如果启用,这个变量在服务器启动时启用自动relay log恢复过程。恢复过程创建一个新的relay log文件,初始化SQL(applier)线程位置到这个新的relay log,并初始化I/O(receiver)线程到applier线程位置。然后,继续从源读取relay log。如果使用了
CHANGE REPLICATION SOURCE TO
选项设置了replication channel的SOURCE_AUTO_POSITION为1,源位置可能是从连接中接收到的,而不是在这个过程中分配的。这个全局变量在运行时是只读的。它的值可以使用
--relay-log-recovery
选项在replica服务器启动时设置,这应该在replica服务器意外中断后使用,以确保不处理可能已损坏的relay log,并且必须在crash-safe replica中使用。默认值是0(禁用)。关于在replica中组合设置的最具恢复能力的信息,请见第19.4.2节,“处理replica意外中断”。对于多线程replica(其中
replica_parallel_workers
大于0),设置--relay-log-recovery
在启动时自动处理relay log中的空隙和不一致。这可能发生在使用文件位置基于replication时。 (更多信息,请见第19.5.1.34节,“replication和事务不一致”。)恢复过程使用与START REPLICA UNTIL SQL_AFTER_MTS_GAPS
语句相同的方法处理空隙。當replica达到一致的空隙状态后,恢复过程继续从源开始fetch事务。當使用GTID-based replication时,多线程replica首先检查SOURCE_AUTO_POSITION
是否设置为ON,如果是,则跳过计算应该跳过或不跳过的交易,以免使用老的relay log恢复过程。Note这个变量不影响以下Group Replication channels:
-
group_replication_applier
-
group_replication_recovery
其他任何channel都将受到影响,例如来自外部源或另一个组的channel。
-
-
Command-Line Format --relay-log-space-limit=#
System Variable relay_log_space_limit
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 18446744073709551615
Unit 字节 所有中继日志的最大存储空间。
-
Command-Line Format --replica-checkpoint-group=#
System Variable replica_checkpoint_group
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 512
Minimum Value 32
Maximum Value 524280
Block Size 8
replica_checkpoint_group
设置了多线程复制服务器在执行检查点操作前可以处理的最大事务数。该变量无论是否启用多线程复制服务器都无效。该变量无立即效果。该变量的状态将应用于所有后续START REPLICA
语句。该变量与
replica_checkpoint_period
系统变量组合使用,以便在达到任何限制时执行检查点,并将跟踪事务数和时间的计数器重置。该变量的最小允许值为32,除非服务器使用
-DWITH_DEBUG
进行构建,在这种情况下最小值为1。服务器将将设置的值向下舍入到下一个8的倍数;在 debug 服务器中,不进行任何舍入。无论服务器是如何构建的,该变量的默认值都是512,最大允许值为524280。 -
Command-Line Format --replica-checkpoint-period=#
System Variable replica_checkpoint_period
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 300
Minimum Value 1
Maximum Value 4294967295
Unit 毫秒 replica_checkpoint_period
设置了在更新多线程复制副本的状态时允许的最大时间(以毫秒为单位),如SHOW REPLICA STATUS
所示。设置这个变量对不启用多线程复制的副本无效。设置这个变量对所有复制通道立即生效,包括正在运行的通道。这个变量与
replica_checkpoint_group
系统变量组合使用,以便在任何一个限制被超出时执行检查点,并将追踪的交易数量和自上一个检查点以来的时间计数器重置。这个变量的最小允许值为1,除非服务器使用
-DWITH_DEBUG
构建,在这种情况下最小值为0。无论服务器是如何构建的,缺省值都是300毫秒,最大可能值是4294967295毫秒(约为49.7天)。 -
Command-Line Format --replica-compressed-protocol[={OFF|ON}]
System Variable replica_compressed_protocol
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
replica_compressed_protocol
指定是否使用源/副本连接协议的压缩,如果源和副本都支持它。如果这个变量被禁用(缺省),连接将不压缩。对这个变量的更改将在下一个连接尝试中生效,这包括在START REPLICA
语句中发出请求,以及运行的复制I/O(接收)线程重新连接。二进制日志事务压缩,启用
binlog_transaction_compression
系统变量,可以将带宽保存。如果您使用二进制日志事务压缩与协议压缩结合使用,协议压缩在数据上有更少的机会,但仍然可以压缩头部和未压缩的事件和事务负载。有关二进制日志事务压缩的更多信息,请参阅第7.4.4.5节,“二进制日志事务压缩”。如果启用了
replica_compressed_protocol
,那么它将优先于CHANGE REPLICATION SOURCE TO
语句中的SOURCE_COMPRESSION_ALGORITHMS
选项。 在这种情况下,连接到源使用zlib
压缩,如果源和副本都支持该算法。 如果replica_compressed_protocol
被禁用,那么SOURCE_COMPRESSION_ALGORITHMS
的值将生效。更多信息,请见第6.2.8节,“Connection Compression Control”。 -
Command-Line Format --replica-exec-mode=mode
System Variable replica_exec_mode
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value IDEMPOTENT
(NDB)STRICT
(其他)Valid Values STRICT
IDEMPOTENT
replica_exec_mode
控制复制线程在复制过程中解决冲突和错误的方式。IDEMPOTENT
模式会抑制重复键和找不到键的错误;STRICT
表示不会抑制这些错误。IDEMPOTENT
模式旨在用于多源复制、循环复制和某些特殊的NDB集群复制场景。 (请见第25.7.10节,“NDB Cluster Replication: Bidirectional and Circular Replication”和第25.7.12节,“NDB Cluster Replication Conflict Resolution”,获取更多信息。 NDB集群忽略任何对replica_exec_mode
的明确设置,并总是将其视为IDEMPOTENT
。在MySQL Server 8.4中,
STRICT
模式是默认值。设置这个变量将立即对所有复制通道生效,包括正在运行的通道。
对于除
NDB
之外的存储引擎,IDEMPOTENT
模式应该只在您确定可以安全忽略重复键错误和键不存在错误时使用。它旨在用于NDB集群的故障转移场景,使用多源复制或环形复制,但不建议在其他场景中使用。 -
Command-Line Format --replica-load-tmpdir=dir_name
System Variable replica_load_tmpdir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名称 Default Value Value of --tmpdir
replica_load_tmpdir
指定了复制服务器在创建临时文件时使用的目录名称。设置该变量将立即生效,对于所有复制通道,包括正在运行的通道。变量的默认值是tmpdir
系统变量的值,或者在该变量未指定时的默认值。当复制SQL线程复制
LOAD DATA
语句时,它将从relay log中提取要加载的文件,并将其转换为临时文件,然后将其加载到表中。如果源文件很大,临时文件也很大,因此可能需要使用该选项将临时文件存储在具有大量可用空间的文件系统中。在这种情况下,relay logs也可能很大,因此可能需要设置relay_log
系统变量将relay logs存储在该文件系统中。指定的目录应该位于基于磁盘的文件系统(不是基于内存的文件系统)中,以便在机器重启时临时文件可以-survive。该目录也不能是操作系统在系统启动过程中清除的目录。然而,复制可以在重启后继续,如果临时文件已经被删除。
-
Command-Line Format --replica-max-allowed-packet=#
System Variable replica_max_allowed_packet
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1073741824
Minimum Value 1024
Maximum Value 1073741824
Unit 字节 Block Size 1024
replica_max_allowed_packet
设置了复制 SQL(applier)和 I/O(receiver)线程可以处理的最大数据包大小,以字节为单位。设置这个变量的效果立即生效,对所有复制通道有效,包括正在运行的通道。源可以写入比其max_allowed_packet
设置更长的二进制日志事件,一旦添加了事件头。设置replica_max_allowed_packet
的值必须大于源的max_allowed_packet
设置,以避免使用行基于的复制大更新导致复制失败。这个全局变量总是具有一个正整数倍数为1024的值;如果您将其设置为某个不是的值,该值将被舍入到下一个高于1024的倍数以存储或使用;将
replica_max_allowed_packet
设置为0将使用1024(一个警告将在所有这些情况下发出)。默认值和最大值是1073741824(1 GB);最小值是1024。 -
Command-Line Format --replica-net-timeout=#
System Variable replica_net_timeout
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 60
Minimum Value 1
Maximum Value 31536000
Unit 秒 replica_net_timeout
指定了源在等待更多数据或心跳信号前可以等待的秒数,以便复制连接断开,中止读取,尝试重新连接。设置这个变量没有立即效果。变量的状态将在所有后续START REPLICA
命令中生效。默认值是60秒(一分钟)。第一次重试将立即发生。重试间隔由
CHANGE REPLICATION SOURCE TO
语句的SOURCE_CONNECT_RETRY
选项控制,重试次数限制由SOURCE_RETRY_COUNT
选项控制。心跳间隔,用于在 absence of data 如果连接仍然良好时避免超时,通过
SOURCE_HEARTBEAT_PERIOD
选项控制CHANGE REPLICATION SOURCE TO
语句。心跳间隔默认为replica_net_timeout
的半值,并记录在复制连接元数据存储库中,并在replication_connection_configuration
性能Schema表中显示。请注意,修改replica_net_timeout
的值或默认设置不会自动更改心跳间隔,无论是否使用之前计算的默认值。如果超时时间被更改,您必须使用CHANGE REPLICATION SOURCE TO
语句来调整心跳间隔,以确保它在超时前发生。 -
Command-Line Format --replica-parallel-type=value
Deprecated Yes System Variable replica_parallel_type
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value LOGICAL_CLOCK
Valid Values DATABASE
LOGICAL_CLOCK
对于多线程复制(replicas,其中
replica_parallel_workers
设置为大于0的值),replica_parallel_type
指定了决定哪些事务可以在复制器上并行执行的策略。该变量对不启用多线程的复制器无效。可能的值是:-
LOGICAL_CLOCK
: 在复制器上根据时间戳对事务进行并行处理,来自binary log的时间戳写入。依赖事务的跟踪基于它们的时间戳,以提供可能的并行化。 -
DATABASE
: 更新不同的数据库的事务可以并行执行。这只适用于数据被分区到多个数据库,并且在源上独立和并发地更新这些数据库。不能存在跨数据库约束,因为这些约束可能在复制器上被违反。
当
replica_preserve_commit_order
启用时,您必须使用LOGICAL_CLOCK
。默认情况下,多线程在副本服务器上启用(replica_parallel_workers=4
),LOGICAL_CLOCK
是默认值。(replica_preserve_commit_order
也默认启用。)当复制拓扑结构使用多级副本时,
LOGICAL_CLOCK
可能在每个级别的副本远离源的每个级别上实现更少的并行化。为了补偿这个影响,您应该将binlog_transaction_dependency_tracking
设置为WRITESET
或WRITESET_SESSION
在源和每个中间副本上,以指定使用写集代替时间戳以实现并行化。当使用
binlog_transaction_compression
系统变量启用二进制日志事务压缩,如果replica_parallel_type
设置为DATABASE
,所有受事务影响的数据库将在事务排程前映射。使用二进制日志事务压缩与DATABASE
策略可以减少并行性相比于未压缩的事务,这些事务将在每个事件上映射和排程。replica_parallel_type
已弃用,同样支持事务并行化使用数据库分区的支持。预计在将来的一次发布中将删除这些支持,并且LOGICAL_CLOCK
将被独自使用。 -
-
Command-Line Format --replica-parallel-workers=#
System Variable replica_parallel_workers
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 4
Minimum Value 0
Maximum Value 1024
replica_parallel_workers
启用副本的多线程,并设置用于并行执行事务的applier线程数。当值大于或等于1时,副本使用指定的线程数来执行事务,plus一个协调线程读取事务从relay log并将其排程到工作者线程。当值为0时,只有一个线程读取和应用事务顺序。如果您使用多个复制通道,变量的值将应用于每个通道的线程。默认值为4,这意味着副本默认启用多线程。
将该变量设置为0已弃用,会引发警告,并且在未来MySQL版本中可能会被删除。对于单个工作线程,设置
replica_parallel_workers
到1即可。当
replica_preserve_commit_order
设置为ON
(默认值)时, replica上的事务将在relay日志中按照相同的顺序外部化。事务的分布方式由replica_parallel_type
确定。这些系统变量也具有适当的多线程默认值。要禁用并行执行,设置
replica_parallel_workers
到1,在这种情况下,replica使用一个协调线程来读取事务,并使用一个工作线程来应用它们,这意味着事务将被顺序应用。當replica_parallel_workers
等于1时,replica_parallel_type
和replica_preserve_commit_order
系统变量无效且被忽略。如果replica_parallel_workers
等于0,而CHANGE REPLICATION SOURCE TO
选项GTID_ONLY
启用时,replica将有一个协调线程和一个工作线程,正如replica_parallel_workers
设置为1时一样。使用一个并行工作线程时,replica_preserve_commit_order
系统变量也无效。设置
replica_parallel_workers
无立即效果,而是应用于所有后续START REPLICA
语句。支持多线程的replica也由NDB Cluster 8.4提供。请参阅Section 25.7.11, “NDB Cluster Replication Using the Multithreaded Applier”,了解更多信息。
增加工作线程的数量可以提高并行性。通常,这可以提高性能,直到某个点,超过该点增加工作线程将导致性能下降,因为并发性问题,如锁定竞争。理想的数量取决于硬件和工作负载;通常需要通过测试来确定。没有主键的表可能会对replica的性能产生更大的负面影响,特别是在
replica_parallel_workers
> 1时;因此,在启用该选项前,确保所有表都有主键。 -
Command-Line Format --replica-pending-jobs-size-max=#
System Variable replica_pending_jobs_size_max
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 128M
Minimum Value 1024
Maximum Value 16EiB
Unit 字节 Block Size 1024
对于多线程复制,设置该变量将最大化可用的内存(以字节为单位),用于存储未应用的事件队列。设置该变量对非多线程复制无效。该变量的状态将在所有后续
START REPLICA
命令中生效。该变量的最小可能值为1024字节;默认值为128MB。最大可能值为18446744073709551615(16 exbibytes)。非精确的1024字节倍数将被舍入到下一个1024字节倍数之前存储。
该变量的值是一个软限制,可以根据正常工作负载进行设置。如果一个 unusually large事件超过该大小,事务将被保持直到所有工作线程的队列为空,然后处理。所有后续事务都将被保持直到大事务完成。
-
Command-Line Format --replica-preserve-commit-order[={OFF|ON}]
System Variable replica_preserve_commit_order
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
对于多线程复制(replicas在
replica_parallel_workers
设置为大于0的值),设置replica_preserve_commit_order=ON
确保事务在复制的relay日志中以相同的顺序执行和提交。该变量对非多线程复制无效。MySQL 8.4中,多线程功能默认启用在复制服务器上(
replica_parallel_workers=4
),因此replica_preserve_commit_order=ON
是默认值,并且replica_parallel_type=LOGICAL_CLOCK
也是默认值。此外,对replica_preserve_commit_order
的设置将被忽略,如果replica_parallel_workers
设置为1,因为在这种情况下,事务顺序将被保留。二进制日志和复制更新日志在复制服务器上不需要启用,以设置
replica_preserve_commit_order=ON
,可以禁用。如果想要。设置replica_preserve_commit_order=ON
需要将replica_parallel_type
设置为LOGICAL_CLOCK
,MySQL 8.4的默认值。在更改replica_preserve_commit_order
和replica_parallel_type
的值之前,必须停止复制SQL线程(如果您使用多个复制通道,需要停止所有复制通道的线程)。当
replica_preserve_commit_order=OFF
设置时,多线程复制服务器可能会并行应用的事务commit出序。因此,检查最近执行的事务不保证源服务器上的所有前置事务已经在复制服务器上执行。可能会出现事务顺序的断续,这对日志和恢复在使用多线程复制服务器时有影响。请参阅第19.5.1.34节,“Replication and Transaction Inconsistencies”了解更多信息。当
replica_preserve_commit_order=ON
设置时,执行的工作线程将等待所有前置事务commit后再commit。线程等待其他线程commit事务时,将报告其状态为Waiting for preceding transaction to commit
。在这种模式下,多线程复制服务器从不进入源服务器未在的状态,这支持使用复制进行读取扩展。请参阅第19.4.5节,“Using Replication for Scale-Out”了解更多信息。Note-
replica_preserve_commit_order=ON
不会防止源二进制日志位置延迟,其中Exec_master_log_pos
位于执行事务的位置之前。请参见第19.5.1.34节,“Replication and Transaction Inconsistencies”。 -
replica_preserve_commit_order=ON
不会保留提交顺序和事务历史,如果复制使用其二进制日志的过滤器,例如--binlog-do-db
。 -
replica_preserve_commit_order=ON
不会保留非事务性DML更新的顺序。这些可能在relay日志中提交前执行的交易,可能会导致relay日志中的交易顺序不一致。 -
在使用语句式复制时,如果事务性和非事务性存储引擎参与一个非XA事务,该事务在源端回滚时,复制可能会将该事务复制到复制端。如果发生这种情况,多线程复制端没有二进制日志记录,无法处理事务回滚,因此复制端的提交顺序与relay日志中的事务顺序不一致。
-
-
Command-Line Format --replica-sql-verify-checksum[={OFF|ON}]
System Variable replica_sql_verify_checksum
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
replica_sql_verify_checksum
使复制SQL(applier)线程验证数据使用relay日志中的校验和。在发生不匹配时,复制端将停止并出现错误。设置该变量将立即生效,对所有复制通道,包括正在运行的通道。Note复制I/O(receiver)线程总是读取校验和,如果可能,从网络接受事件。
-
Command-Line Format --replica-transaction-retries=#
System Variable replica_transaction_retries
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 10
Minimum Value 0
Maximum Value 18446744073709551615
replica_transaction_retries
设置了单线程或多线程副本的自动重试失败事务的最大次数。设置该变量将立即生效,包括正在运行的通道。默认值为10。将变量设置为0将禁用自动重试事务。如果复制SQL线程由于InnoDB死锁或事务执行时间超过InnoDB的
innodb_lock_wait_timeout
或NDB的TransactionDeadlockDetectionTimeout
或TransactionInactiveTimeout
而失败,它将自动重试replica_transaction_retries
次,然后停止并出现错误。非临时错误的事务不予重试。性能Schema表replication_applier_status显示了每个复制通道上的重试次数,在
COUNT_TRANSACTIONS_RETRIES
列中。性能Schema表replication_applier_status_by_worker显示了单线程或多线程副本上的详细信息,包括每个工作线程的重试次数,并标识了导致最后一个事务和当前事务重试的错误。 -
Command-Line Format --replica-type-conversions=set
System Variable replica_type_conversions
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Set Default Value Valid Values ALL_LOSSY
ALL_NON_LOSSY
ALL_SIGNED
ALL_UNSIGNED
replica_type_conversions
控制在使用行基于的复制时在复制服务器上的类型转换模式。其值是一个逗号分隔的零或多个元素列表,从列表中选择:ALL_LOSSY
,ALL_NON_LOSSY
,ALL_SIGNED
,ALL_UNSIGNED
。将该变量设置为空字符串以禁止源和复制服务器之间的类型转换。设置该变量将立即生效,对所有复制通道,包括正在运行的通道。关于行基于的复制中属性提升和降低的类型转换模式的详细信息,请见行基于的复制:属性提升和降低。
-
replication_optimize_for_static_plugin_config
Command-Line Format --replication-optimize-for-static-plugin-config[={OFF|ON}]
System Variable replication_optimize_for_static_plugin_config
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
使用共享锁,以提高半同步复制的性能。该设置和
replication_sender_observe_commit_only
在 replica 数量增加时,帮助避免锁定竞争,提高性能。启用该系统变量时,半同步复制插件不能卸载,因此在卸载前必须禁用该变量。该系统变量可以在安装半同步复制插件前或后启用,并且可以在复制运行时启用。半同步复制源服务器也可以从启用该变量中获得性能提高,因为它们使用相同的锁定机制。
replication_optimize_for_static_plugin_config
可以在 Group Replication 中启用在服务器上。 在这种情况下,它可能在锁定竞争高时提高性能。 -
replication_sender_observe_commit_only
Command-Line Format --replication-sender-observe-commit-only[={OFF|ON}]
System Variable replication_sender_observe_commit_only
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
限制回调以提高半同步复制的性能。这个设置和
replication_optimize_for_static_plugin_config
在 replica 数量增加时都有帮助,因为锁定的竞争可能会减慢性能。这个系统变量可以在安装半同步复制插件前或后启用,并且可以在复制运行时启用。半同步复制源服务器启用这个系统变量也可以获得性能提高,因为它们使用与 replica 一样的锁定机制。
-
Command-Line Format --report-host=host_name
System Variable report_host
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 在 replica 注册到源服务器时要报告的 replica 主机名或 IP 地址。这值将出现在源服务器上的
SHOW REPLICAS
输出中。如果您不想让 replica 注册到源服务器,可以留空。Note源服务器不能简单地从 TCP/IP 套接字中读取 replica 服务器的 IP 地址,因为这可能会受到 NAT 和其他路由问题的影响。
-
Command-Line Format --report-password=name
System Variable report_password
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 在 replica 注册到源服务器时要报告的 replica 账户密码。这值将出现在源服务器上的
SHOW REPLICAS
输出中,如果源服务器使用了--show-replica-auth-info
选项。虽然这个变量的名称可能会误导您,
report_password
与 MySQL 授权系统无关,因此可能与 MySQL 复制用户账户密码不同。 -
Command-Line Format --report-port=port_num
System Variable report_port
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value [slave_port]
Minimum Value 0
Maximum Value 65535
连接到副本的TCP/IP端口号,用于在副本注册时报告给源服务器。只有在副本监听非默认端口或有特殊隧道从源服务器或其他客户端到副本时才设置此选项。如果您不确定,请不要使用此选项。
该选项的默认值是副本实际使用的端口号。这也是
SHOW REPLICAS
显示的默认值。 -
Command-Line Format --report-user=name
System Variable report_user
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 副本注册时报告给源服务器的副本用户名称。这值将出现在
SHOW REPLICAS
的输出中,如果源服务器使用了--show-replica-auth-info
选项。虽然该变量名称可能暗示它与MySQL用户权限系统相关,但
report_user
实际上与MySQL复制用户帐户无关,并且不一定是MySQL复制用户帐户的名称。 -
Command-Line Format --rpl-read-size=#
System Variable rpl_read_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8192
Minimum Value 8192
Maximum Value 4294959104
Unit 字节 Block Size 8192
系统变量
rpl_read_size
控制从二进制日志文件和中继日志文件中读取的最小数据量(以字节为单位)。如果对这些文件的磁盘I/O活动影响了性能,可以增加读取大小以减少文件读取和I/O停滞。rpl_read_size
的最小和默认值是8192字节。该值必须是4KB的倍数。注意,每个读取二进制日志和中继日志文件的线程都将分配一个大小为该值的缓冲区,包括源服务器上的dump线程和副本服务器上的协调线程。设置较大值可能会影响内存使用。 -
Command-Line Format --rpl-semi-sync-replica-enabled[={OFF|ON}]
System Variable rpl_semi_sync_replica_enabled
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
rpl_semi_sync_replica_enabled
控制副本服务器上的半同步复制是否启用。要启用或禁用插件,请将该变量设置为ON
或OFF
(或1或0),分别。默认值为OFF
。该变量仅在副本服务器上安装了半同步复制插件时可用。
-
rpl_semi_sync_replica_trace_level
Command-Line Format --rpl-semi-sync-replica-trace-level=#
System Variable rpl_semi_sync_replica_trace_level
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 32
Minimum Value 0
Maximum Value 4294967295
rpl_semi_sync_replica_trace_level
控制副本服务器上的半同步复制调试跟踪级别。请参阅rpl_semi_sync_master_trace_level
以获取可接受的值。该变量仅在副本服务器上安装了半同步复制插件时可用。
-
Command-Line Format --rpl-semi-sync-slave-enabled[={OFF|ON}]
System Variable rpl_semi_sync_slave_enabled
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
已弃用的同义词
rpl_semi_sync_replica_enabled
。 -
rpl_semi_sync_slave_trace_level
Command-Line Format --rpl-semi-sync-slave-trace-level=#
System Variable rpl_semi_sync_slave_trace_level
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 32
Minimum Value 0
Maximum Value 4294967295
已弃用的同义词,用于
rpl_semi_sync_replica_trace_level
. -
Command-Line Format --rpl-stop-replica-timeout=#
System Variable rpl_stop_replica_timeout
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 31536000
Minimum Value 2
Maximum Value 31536000
Unit 秒 您可以通过设置该变量来控制
STOP REPLICA
等待的时间(以秒为单位),以避免死锁在STOP REPLICA
和其他SQL语句之间的连接。该变量的最大值和默认值为31536000秒(1年)。最小值为2秒。该变量的更改将在下一个
STOP REPLICA
语句中生效。该变量只影响发出
STOP REPLICA
语句的客户端。当超时达到时,客户端将返回错误消息,指出命令执行不完整。客户端然后停止等待复制I/O(接收器)和SQL(应用程序)线程停止,但复制线程将继续尝试停止,直到STOP REPLICA
语句执行完成。 -
Command-Line Format --rpl-stop-slave-timeout=#
Deprecated 是 System Variable rpl_stop_slave_timeout
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 31536000
Minimum Value 2
Maximum Value 31536000
Unit 秒 已弃用同义词,用于
rpl_stop_replica_timeout
. -
Command-Line Format --skip-replica-start[={OFF|ON}]
System Variable skip_replica_start
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
skip_replica_start
告诉副本服务器在服务器启动时不启动复制I/O(接收器)和SQL(应用程序)线程。要在后续启动线程,请使用START REPLICA
语句。这个系统变量是只读的,可以使用
PERSIST_ONLY
关键字或@@persist_only
限定符与SET
语句来设置。命令行选项--skip-replica-start
也可以设置这个系统变量。您可以使用系统变量代替命令行选项,以便使用 MySQL 服务器的权限结构,避免数据库管理员需要操作系统的特权访问权限。 -
Command-Line Format --skip-slave-start[={OFF|ON}]
Deprecated 是 System Variable skip_slave_start
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
已弃用的同义词
--skip-replica-start
。 -
Command-Line Format --slave-checkpoint-group=#
Deprecated 是 System Variable slave_checkpoint_group
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 512
Minimum Value 32
Maximum Value 524280
Block Size 8
已弃用的同义词
replica_checkpoint_group
。 -
Command-Line Format --slave-checkpoint-period=#
Deprecated 是 System Variable slave_checkpoint_period
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 300
Minimum Value 1
Maximum Value 4294967295
Unit 毫秒 已弃用,synonym for
replica_checkpoint_period
. -
Command-Line Format --slave-compressed-protocol[={OFF|ON}]
Deprecated 是 System Variable slave_compressed_protocol
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
已弃用,synonym for
replica_compressed_protocol
. -
Command-Line Format --slave-exec-mode=mode
System Variable slave_exec_mode
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value IDEMPOTENT
(NDB)STRICT
(Other)Valid Values STRICT
IDEMPOTENT
已弃用,synonym for
replica_exec_mode
. -
Command-Line Format --slave-load-tmpdir=dir_name
Deprecated 是 System Variable slave_load_tmpdir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名 Default Value Value of --tmpdir
已弃用,synonym for
replica_load_tmpdir
. -
Command-Line Format --slave-max-allowed-packet=#
Deprecated 是 System Variable slave_max_allowed_packet
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1073741824
Minimum Value 1024
Maximum Value 1073741824
Unit 字节 Block Size 1024
已弃用,synonym for
replica_max_allowed_packet
. -
Command-Line Format --slave-net-timeout=#
Deprecated 是 System Variable slave_net_timeout
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 60
Minimum Value 1
Maximum Value 31536000
Unit 秒 已弃用的别名,用于
replica_net_timeout
. -
Command-Line Format --slave-parallel-type=value
Deprecated 是 System Variable slave_parallel_type
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value LOGICAL_CLOCK
Valid Values DATABASE
LOGICAL_CLOCK
已弃用的别名,用于
replica_parallel_type
. -
Command-Line Format --slave-parallel-workers=#
Deprecated 是 System Variable slave_parallel_workers
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 4
Minimum Value 0
Maximum Value 1024
已弃用的别名,用于
replica_parallel_workers
. -
Command-Line Format --slave-pending-jobs-size-max=#
Deprecated 是 System Variable slave_pending_jobs_size_max
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 128M
Minimum Value 1024
Maximum Value 16EiB
Unit 字节 Block Size 1024
已弃用的别名,用于
replica_pending_jobs_size_max
. -
Command-Line Format --slave-preserve-commit-order[={OFF|ON}]
Deprecated 是 System Variable slave_preserve_commit_order
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
已弃用的别名为
replica_preserve_commit_order
. -
Command-Line Format --slave-skip-errors=name
Deprecated 是 System Variable slave_skip_errors
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value OFF
Valid Values OFF
[list of error codes]
all
ddl_exist_errors
已弃用的别名为
replica_skip_errors
. -
Command-Line Format --replica-skip-errors=name
System Variable replica_skip_errors
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value OFF
Valid Values OFF
[list of error codes]
all
ddl_exist_errors
通常情况下,复制时遇到错误时,复制将停止,这给了你机会来手动解决数据不一致。这变量使得复制SQL线程在遇到错误时继续复制,错误列表在变量值中指定。
-
Command-Line Format --slave-sql-verify-checksum[={OFF|ON}]
Deprecated 是 System Variable slave_sql_verify_checksum
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
已弃用的别名为
replica_sql_verify_checksum
. -
Command-Line Format --slave-transaction-retries=#
Deprecated 是 System Variable slave_transaction_retries
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 10
Minimum Value 0
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
已弃用别名,为
replica_transaction_retries
。 -
Command-Line Format --slave-type-conversions=set
Deprecated 是 System Variable slave_type_conversions
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type Set Default Value Valid Values ALL_LOSSY
ALL_NON_LOSSY
ALL_SIGNED
ALL_UNSIGNED
已弃用别名,为
replica_type_conversions
。 -
System Variable sql_replica_skip_counter
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 4294967295
sql_replica_skip_counter
变量指定从源服务器中跳过的事件数量。设置该选项无立即效果。该变量适用于下一个START REPLICA
语句;下一个START REPLICA
语句也将将该值更改回0。该变量设置为非零值时,并且存在多个复制通道配置时,START REPLICA
语句只能使用FOR CHANNEL
子句。channel
该选项与GTID-基于的复制不兼容,在
gtid_mode=ON
时不能将其设置为非零值。如果您需要在使用GTIDs时跳过事务,请使用gtid_executed
从源端。如果您已在复制通道上启用GTID分配使用CHANGE REPLICATION SOURCE TO
语句的sql_replica_skip_counter
可用。请参阅第19.1.7.3节,“跳过事务”.Important如果将该变量设置为跳过指定事件的数量将使复制从事件组的中间开始,复制将继续跳过直到找到下一个事件组的开始,并从该点开始。更多信息,请参阅第19.1.7.3节,“跳过事务”.
-
Deprecated 是 System Variable sql_slave_skip_counter
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 4294967295
已弃用的别名
sql_replica_skip_counter
. -
Command-Line Format --sync-master-info=#
Deprecated 是 System Variable sync_master_info
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 10000
Minimum Value 0
Maximum Value 4294967295
已弃用的别名
sync_source_info
. -
Command-Line Format --sync-relay-log=#
System Variable sync_relay_log
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 10000
Minimum Value 0
Maximum Value 4294967295
如果该变量的值大于0,MySQL服务器将在每写入
sync_relay_log
事件到relay log后将其同步到磁盘(使用fdatasync()
)。设置该变量将立即生效,对所有复制通道都有效,包括正在运行的通道。将
sync_relay_log
设置为0将不执行磁盘同步;在这种情况下,服务器将依赖操作系统在某个时间点将relay log的内容flush到磁盘。值为1是最安全的选择,因为在unexpected halt时你最多失去一个事件从relay log中。但是,这也是最慢的选择(除非磁盘有电池缓存,使同步非常快)。对于最具弹性的复制设置,请参见第19.4.2节,“Handling an Unexpected Halt of a Replica”。
-
Command-Line Format --sync-relay-log-info=#
Deprecated 是 System Variable sync_relay_log_info
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 10000
Minimum Value 0
Maximum Value 4294967295
复制元数据存储库的更新事务数。当applier元数据存储库以
InnoDB
表的形式存储时,这个系统变量将被忽略。否则,如果applier元数据存储库以文件形式存储(已弃用),复制服务器将在这个事务数后将其relay-log.info
文件同步到磁盘(使用fdatasync()
)。0
(零)意味着文件内容将由操作系统flush。设置该变量将立即生效,对所有复制通道都有效,包括正在运行的通道。由于存储applier元数据的文件已弃用,这个变量也已弃用,服务器将在设置或读取该变量时raise一个警告。你应该预期
sync_relay_log_info
将在未来的MySQL版本中被删除,并且现在将可能依赖于它的应用程序迁移到新的设置。 -
Command-Line Format --sync-source-info=#
System Variable sync_source_info
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 10000
Minimum Value 0
Maximum Value 4294967295
sync_source_info
指定复制源更新连接元数据存储库的事件数。当连接元数据存储库以InnoDB
表形式存储时(默认),它将在事件数达到该值后更新。如果连接元数据存储库以文件形式存储(已弃用),复制源将同步其master.info
文件到磁盘(使用fdatasync()
)以达到该事件数。默认值为10000,零值表示存储库从不更新。设置该变量将立即生效,对所有复制通道,包括正在运行的通道。 -
Command-Line Format --terminology-use-previous=#
System Variable terminology_use_previous
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value NONE
Valid Values NONE
BEFORE_8_0_26
BEFORE_8_2_0
MySQL 8.0中对 instrumentation 名称进行了不兼容的更改,包含了术语
master
、slave
和mts
(Multi-Threaded Slave),这些术语被分别更改为source
、replica
和mta
(Multi-Threaded Applier)。如果这些不兼容的更改影响了您的应用程序,请将terminology_use_previous
设置为BEFORE_8_0_26
以使 MySQL 服务器使用旧版本的名称来指定对象。这使得监控工具可以继续工作,直到它们可以更新到使用新名称为止。MySQL 8.4通常显示
REPLICA_SIDE_DISABLED
,而不是SLAVESIDE_DISABLED
在SHOW CREATE EVENT
、SHOW EVENTS
和查询 Information SchemaEVENTS
表的输出。您可以通过将terminology_use_previous
设置为BEFORE_8_0_26
或BEFORE_8_2_0
来使SLAVESIDE_DISABLED
显示。将
terminology_use_previous
系统变量设置为会话范围,以支持个人用户,或者将其设置为全局范围,以使其成为所有新会话的默认值。当使用全局范围时,慢查询日志将包含旧版本的名称。影响的仪表名称列举如下。
terminology_use_previous
系统变量只影响这些项目,不影响 MySQL 8.0 中引入的系统变量、状态变量和命令行选项的新别名,这些别名仍然可以使用,即使启用了它。-
instrumented 锁(mutexes),在
mutex_instances
和events_waits_*
Performance Schema 表中,以wait/synch/mutex/
前缀可见 -
读写锁, 在
rwlock_instances
和events_waits_*
Performance Schema 表中,以wait/synch/rwlock/
前缀可见 -
instrumented 条件变量,在
cond_instances
和events_waits_*
Performance Schema 表中,以wait/synch/cond/
前缀可见 -
instrumented 内存分配,在
memory_summary_*
Performance Schema 表中,以memory/sql/
前缀可见 -
线程名称,在
threads
Performance Schema 表中,以thread/sql/
前缀可见 -
线程阶段,在
events_stages_*
Performance Schema 表中,以stage/sql/
前缀可见,且在threads
和processlist
Performance Schema 表中,以及SHOW PROCESSLIST
语句、Information Schemaprocesslist
表和慢查询日志中无前缀 -
线程命令,在
events_statements_history*
和events_statements_summary_*_by_event_name
Performance Schema 表中,以statement/com/
前缀可见,且在threads
和processlist
Performance Schema 表中,以及SHOW PROCESSLIST
语句、Information Schemaprocesslist
表和SHOW REPLICA STATUS
语句中无前缀
-