暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

【ACDU翻译】MySQL 17.1.6.3 副本服务器选项和变量

原创 由迪 2022-08-30
694

本节介绍适用于副本服务器的服务器选项和系统变量,并包含以下内容:

命令行选项文件中指定选项。许多选项可以在服务器运行时通过使用 CHANGE REPLICATION SOURCE TO 语句(来自 MySQL 8.0.23)或CHANGE MASTER TO语句(在 MySQL 8.0.23 之前)来设置。使用 指定系统变量值 SET

服务器标识。 在源和每个副本上,您必须设置 系统变量以在 1 到 2 32 - 1server_id的范围内建立唯一的复制 ID 。 “唯一” 意味着每个 ID 必须不同于任何其他源使用的每个其他 ID或复制拓扑中的副本。示例文件: my.cnf

[mysqld] server-id=3
副本服务器的启动选项

本节介绍用于控制副本服务器的启动选项。许多这些选项可以在服务器运行时通过使用CHANGE REPLICATION SOURCE TO语句(来自 MySQL 8.0.23)或 CHANGE MASTER TO语句(在 MySQL 8.0.23 之前)来设置。其他的,比如 --replicate-*options,只能在replica server启动时设置。本节稍后将讨论与复制相关的系统变量。

  • --master-info-file=*file_name*

    命令行格式 --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=*count*

    命令行格式 --master-retry-count=#
    已弃用 是的
    类型 整数
    默认值 86400
    最小值 0
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295

    副本在放弃之前尝试重新连接到源的次数。默认值为 86400 次。值 0 表示“无限”,副本尝试永远连接。当副本达到其连接超时(由 replica_net_timeoutor slave_net_timeout系统变量指定)而没有从源接收数据或心跳信号时,将触发重新连接尝试。SOURCE_CONNECT_RETRY以| 设置的时间间隔尝试重新连接。 |MASTER_CONNECT_RETRY的选项 语句(默认为每 60 秒)。 CHANGE REPLICATION SOURCE TOCHANGE MASTER TO

    此选项已弃用;期望它在未来的 MySQL 版本中被删除。使用 SOURCE_RETRY_COUNT| |MASTER_RETRY_COUNT的选项 而是声明。 CHANGE REPLICATION SOURCE TOCHANGE MASTER TO

  • --max-relay-log-size=*size*

    命令行格式 --max-relay-log-size=#
    系统变量 max_relay_log_size
    范围 全局
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1073741824
    单元 字节
    块大小 4096

    服务器自动轮换中继日志文件的大小。如果此值非零,则中继日志在其大小超过此值时自动轮换。如果此值为零(默认值),则发生中继日志轮换的大小由 的值确定 max_binlog_size。有关更多信息,请参阅第 17.2.4.1 节,“中继日志”

  • --relay-log-purge={0|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=*size*

    命令行格式 --relay-log-space-limit=#
    系统变量 relay_log_space_limit
    范围 全局
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295
    单元 字节

    此选项对副本上所有中继日志的总大小(以字节为单位)设置上限。值 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=*db_name*

    命令行格式 --replicate-do-db=name
    类型 细绳

    使用数据库名称创建复制过滤器。也可以使用创建此类过滤器 CHANGE REPLICATION FILTER REPLICATE_DO_DB

    此选项支持特定于通道的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。*channel_1*在名为use 的通道上配置特定于通道的复制过滤器 。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是文字冒号。有关详细信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器”--replicate-do-db:*channel_1*:*db_name*

    笔记

    全局复制过滤器不能在为 Group Replication 配置的 MySQL 服务器实例上使用,因为过滤某些服务器上的事务会使 group 无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接参与组复制的复制通道,例如组成员还充当组外部源的副本。它们不能用于 group_replication_appliergroup_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;

    副本上的数据库中的februarysales按照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更改名为 by 的数据库中的表,并且选择默认数据库对此行为没有影响。

    如果您需要跨数据库更新才能工作,请 改用。请参阅第 17.2.5 节,“服务器如何评估复制过滤规则”--replicate-wild-do-table=*db_name*.%

    笔记

    --binlog-do-db此选项以与影响二进制日志记录 相同的方式影响复制 ,并且复制格式对--replicate-do-db 复制行为的影响与日志记录格式对 --binlog-do-db.

    此选项对 BEGINCOMMITROLLBACK 语句没有影响。

  • --replicate-ignore-db=*db_name*

    命令行格式 --replicate-ignore-db=name
    类型 细绳

    使用数据库名称创建复制过滤器。也可以使用创建此类过滤器 CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB

    此选项支持特定于通道的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。*channel_1*在名为use 的通道上配置特定于通道的复制过滤器 。在这种情况下,第一个冒号被解释为分隔符,随后的冒号是文字冒号。有关详细信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器”--replicate-ignore-db:*channel_1*:*db_name*

    笔记

    全局复制过滤器不能在为 Group Replication 配置的 MySQL 服务器实例上使用,因为过滤某些服务器上的事务会使 group 无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接参与组复制的复制通道,例如组成员还充当组外部源的副本。它们不能用于 group_replication_appliergroup_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-dbUSEsalesUPDATEsales.january--replicate-ignore-db=salessales 副本将忽略的数据库。

    如果您正在使用跨数据库更新并且不希望复制这些更新,则不应使用此选项。请参阅第 17.2.5 节,“服务器如何评估复制过滤规则”

    如果您需要跨数据库更新才能工作,请 改用。请参阅第 17.2.5 节,“服务器如何评估复制过滤规则”--replicate-wild-ignore-table=*db_name*.%

    笔记

    --binlog-ignore-db此选项以与影响二进制日志记录 相同的方式影响复制 ,并且复制格式对--replicate-ignore-db 复制行为的影响与日志记录格式对 --binlog-ignore-db.

    此选项对 BEGINCOMMITROLLBACK 语句没有影响。

  • --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*

    笔记

    全局复制过滤器不能在为 Group Replication 配置的 MySQL 服务器实例上使用,因为过滤某些服务器上的事务会使 group 无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接参与组复制的复制通道,例如组成员还充当组外部源的副本。它们不能用于 group_replication_appliergroup_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*

    笔记

    全局复制过滤器不能在为 Group Replication 配置的 MySQL 服务器实例上使用,因为过滤某些服务器上的事务会使 group 无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接参与组复制的复制通道,例如组成员还充当组外部源的副本。它们不能用于 group_replication_appliergroup_replication_recovery通道。

    此选项仅影响适用于表的语句。它不影响仅适用于其他数据库对象的语句,例如存储的例程。要过滤在存储例程上运行的语句,请使用一个或多个 --replicate-*-db选项。

  • --replicate-rewrite-db=*from_name*->*to_name*

    命令行格式 --replicate-rewrite-db=old_name->new_name
    类型 细绳

    告诉副本创建一个复制过滤器, *to_name*如果它 *from_name*在源上,则将指定的数据库转换为。只有涉及表的语句会受到影响,而不是诸如CREATE DATABASEDROP 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 选项时遵循以下建议:

    • 在源和具有不同名称的副本上手动 创建*from_name和 数据库。to_name*
    • 如果您使用基于语句或混合二进制日志记录格式,请不要使用跨数据库查询,也不要在查询中指定数据库名称。对于 DDL 和 DML 语句,都依赖于 USE语句来指定当前数据库,并且在查询中只使用表名。
    • 如果您专门使用基于行的二进制日志记录格式,对于 DDL 语句,依赖 USE语句指定当前数据库,并在查询中仅使用表名。对于 DML 语句,您可以根据需要使用完全限定的表名 ( db. table)。

    如果遵循这些建议,则可以安全地将该 --replicate-rewrite-db选项与表级复制过滤选项(例如 --replicate-do-table.

    此选项支持特定于通道的复制过滤器,使多源副本能够对不同的源使用特定的过滤器。指定通道名称,后跟冒号,后跟过滤器规范。第一个冒号被解释为分隔符,任何后续冒号被解释为文字冒号。例如,要在名为 的通道上配置特定于通道的复制过滤器 channel_1,请使用:

    $> mysqld --replicate-rewrite-db=channel_1:db_name1->db_name2
    

    如果您使用冒号但未指定通道名称,则该选项为默认复制通道配置复制过滤器。有关详细信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器”

    笔记

    全局复制过滤器不能在为 Group Replication 配置的 MySQL 服务器实例上使用,因为过滤某些服务器上的事务会使 group 无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接参与组复制的复制通道,例如组成员还充当组外部源的副本。它们不能用于 group_replication_appliergroup_replication_recovery通道。

  • --replicate-same-server-id

    命令行格式 --replicate-same-server-id[={OFF|ON}]
    类型 布尔值
    默认值 OFF

    此选项用于副本。默认值为 0 ( FALSE)。将此选项设置为 1 ( TRUE) 时,副本不会跳过具有自己的服务器 ID 的事件。此设置通常仅在极少数配置中有用。

    在副本上启用二进制日志记录时, 如果服务器是循环复制拓扑的一部分,则副本上的--replicate-same-server-id 和选项的组合可能会导致复制中的无限循环。--log-slave-updates(在 MySQL 8.0 中,默认启用二进制日志记录,启用二进制日志记录时默认启用副本更新日志记录。)但是,使用全局事务标识符 (GTID) 通过跳过已经执行的事务的执行来防止这种情况应用。如果 gtid_mode=ON在副本上设置,您可以使用此选项组合启动服务器,但在服务器运行时不能更改为任何其他 GTID 模式。如果设置了任何其他 GTID 模式,则服务器不会以该选项组合启动。

    默认情况下,如果二进制日志事件具有副本的服务器 ID,则复制 I/O(接收者)线程不会将二进制日志事件写入中继日志(此优化有助于节省磁盘使用量)。如果要使用 --replicate-same-server-id,请确保在使副本读取您希望复制 SQL(应用程序)线程执行的自己的事件之前使用此选项启动副本。

  • --replicate-wild-do-table=*db_name.tbl_name*

    命令行格式 --replicate-wild-do-table=name
    类型 细绳

    通过告诉复制 SQL(应用程序)线程将复制限制为任何更新的表与指定的数据库和表名模式匹配的语句来创建复制过滤器。模式可以包含 the %_通配符,它们的含义与 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*

    重要的

    全局复制过滤器不能在为 Group Replication 配置的 MySQL 服务器实例上使用,因为过滤某些服务器上的事务会使 group 无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接参与组复制的复制通道,例如组成员还充当组外部源的副本。它们不能用于 group_replication_appliergroup_replication_recovery通道。

    --replicate-wild-do-table 选项指定的复制过滤器适用于表、视图和触发器。它不适用于存储过程和函数或事件。要过滤对后者对象操作的语句,请使用一个或多个--replicate-*-db选项。

    例如, --replicate-wild-do-table=foo%.bar% 仅复制使用数据库名称以 开头foo且表名称以 开头的表的更新bar

    如果表名模式是%,它匹配任何表名,并且该选项也适用于数据库级语句(CREATE DATABASEDROP DATABASEALTER DATABASE)。例如,如果您使用 --replicate-wild-do-table=foo%.%,如果数据库名称与模式匹配,则会复制数据库级别的语句foo%

    重要的

    表级复制过滤器仅适用于查询中明确提及和操作的表。它们不适用于由查询隐式更新的表。例如, GRANT更新mysql.user系统表但未提及该表的语句不受指定mysql.%为通配符模式的过滤器的影响。

    要在数据库或表名模式中包含文字通配符,请使用反斜杠对其进行转义。例如,要复制名为 的数据库的所有表 my_own%db,但不从my1ownAABCdb数据库中复制表,您应该像这样转义a _nd% 字符: --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*

    重要的

    全局复制过滤器不能在为 Group Replication 配置的 MySQL 服务器实例上使用,因为过滤某些服务器上的事务会使 group 无法就一致状态达成一致。特定于通道的复制过滤器可用于不直接参与组复制的复制通道,例如组成员还充当组外部源的副本。它们不能用于 group_replication_appliergroup_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

    命令行格式 --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

    命令行格式 --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由于检查 epoch 序列号 的内部机制,在 NDB Clusters 之间进行复制时,此选项的工作方式 不同;通常,一旦 NDB检测到一个 epoch 号丢失或乱序,它会立即停止副本应用程序线程。从 NDB 8.0.28 开始,您可以通过与;--ndb-applier-allow-skip-epoch 一起指定来覆盖此行为 。--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

    命令行格式 --abort-slave-event-count=#
    已弃用 8.0.29
    类型 整数
    默认值 0
    最小值 0

    当此选项设置为 *value*0 以外的某个正整数(默认值)时,它会影响复制行为,如下所示: 复制 SQL 线程启动后, *value*允许执行日志事件;之后,复制 SQL 线程不再接收任何事件,就像来自源的网络连接被切断一样。复制 SQL 线程继续运行,输出 SHOW REPLICA STATUS显示YesReplica_IO_RunningReplica_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

    命令行格式 --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

    命令行格式 --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

    命令行格式 --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设置了when,语句以statement格式记录。binlog_format=MIXED设置 时以行格式记录的慢查询 ,或在何时记录的慢查询binlog_format=ROW已设置,即使 log_slow_replica_statements 已启用,也不会添加到副本的慢查询日志中。

    设置 log_slow_replica_statements 没有立竿见影的效果。变量的状态适用于所有后续 START REPLICA语句。另请注意,全局设置long_query_time 适用于 SQL 线程的生命周期。如果更改该设置,则必须停止并重新启动复制 SQL 线程以在此处实施更改(例如,通过发出STOP REPLICASTART REPLICA带有选项的语句 SQL_THREAD)。

  • log_slow_slave_statements

    命令行格式 --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设置了when,语句以statement格式记录。binlog_format=MIXED设置 时以行格式记录的慢查询 ,或在何时记录的慢查询binlog_format=ROW已设置,即使 log_slow_slave_statements 已启用,也不会添加到副本的慢查询日志中。

    设置 log_slow_slave_statements 没有立竿见影的效果。变量的状态适用于所有后续 START REPLICA语句。另请注意,全局设置long_query_time 适用于 SQL 线程的生命周期。如果更改该设置,则必须停止并重新启动复制 SQL 线程以在此处实施更改(例如,通过发出STOP REPLICASTART REPLICA带有选项的语句 SQL_THREAD)。

  • master_info_repository

    命令行格式 --master-info-repository={FILE|TABLE}
    已弃用 8.0.23
    系统变量 master_info_repository
    范围 全局
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 TABLE
    有效值 FILE``TABLE

    现在不推荐使用此系统变量。该设置TABLE是默认设置,并且在配置多个复制通道时需要。替代设置FILE以前已弃用。

    在默认设置下,副本将关于源的元数据(包括状态和连接信息)记录到系统数据库InnoDBmysql名为 mysql.slave_master_info. 有关连接元数据存储库的更多信息,请参阅 第 17.2.4 节,“中继日志和复制元数据存储库”

    FILE设置将副本的连接元数据存储库写入 master.info默认命名的文件。可以使用该 --master-info-file选项更改名称。

  • max_relay_log_size

    命令行格式 --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 节,“复制线程”

  • relay_log

    命令行格式 --relay-log=file_name
    系统变量 relay_log
    范围 全局
    动态的
    SET_VAR提示适用
    类型 文件名

    中继日志文件的基本名称。对于默认复制通道,中继日志的默认基本名称是 *host_name*-relay-bin. 对于非默认复制通道,中继日志的默认基本名称是 ,其中是记录在此中继日志中的复制通道的名称。 *host_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

    系统变量 relay_log_basename
    范围 全局
    动态的
    SET_VAR提示适用
    类型 文件名
    默认值 datadir + '/' + hostname + '-relay-bin'

    保存中继日志文件的基本名称和完整路径。最大变量长度为 256。该变量由服务器设置,是只读的。

  • relay_log_index

    命令行格式 --relay-log-index=file_name
    系统变量 relay_log_index
    范围 全局
    动态的
    SET_VAR提示适用
    类型 文件名
    默认值 *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 如何处理服务器选项的更多信息,请参阅 第 4.2.2 节,“指定程序选项”

  • relay_log_info_file

    命令行格式 --relay-log-info-file=file_name
    已弃用 8.0.18
    系统变量 relay_log_info_file
    范围 全局
    动态的
    SET_VAR提示适用
    类型 文件名
    默认值 relay-log.info

    现在不推荐使用此系统变量。如果已设置,则用于设置副本的应用程序元数据存储库的文件名 relay_log_info_repository=FILErelay_log_info_file并且 relay_log_info_repository 系统变量的使用已被弃用,因为应用程序元数据存储库的文件已被崩溃安全表所取代。有关应用程序元数据存储库的信息,请参阅 第 17.2.4.2 节,“复制元数据存储库”

  • relay_log_info_repository

    命令行格式 --relay-log-info-repository=value
    已弃用 8.0.23
    系统变量 relay_log_info_repository
    范围 全局
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 TABLE
    有效值 FILE``TABLE

    现在不推荐使用此系统变量。该设置TABLE是默认设置,并且在配置多个复制通道时需要。副本的应用程序元数据存储库的TABLE设置也需要使复制能够适应意外停止。有关详细信息,请参阅 第 17.4.2 节,“处理副本的意外停止” 。替代设置 FILE以前已弃用。

    使用默认设置,副本将其应用程序元数据存储库存储为系统数据库InnoDBmysql名为 mysql.slave_relay_log_info. 有关应用程序元数据存储库的更多信息,请参阅 第 17.2.4 节,“中继日志和复制元数据存储库”

    FILE设置将副本的应用程序元数据存储库写入 relay-log.info默认命名的文件。可以使用 relay_log_info_file系统变量更改名称。

  • relay_log_purge

    命令行格式 --relay-log-purge[={OFF|ON}]
    系统变量 relay_log_purge
    范围 全局
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    一旦不再需要中继日志文件,就禁用或启用它们的自动清除。默认值为 1 ( ON)。

  • relay_log_recovery

    命令行格式 --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_workersslave_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=#
    系统变量 relay_log_space_limit
    范围 全局
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295
    单元 字节

    用于所有中继日志的最大空间量。

  • replica_checkpoint_group

    命令行格式 --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 集群复制中的已知问题”

    此变量与 replica_checkpoint_period 系统变量结合使用,当超过任一限制时,将执行检查点,并重置跟踪事务数量和自上一个检查点以来经过的时间的计数器。

    此变量的最小允许值为 32,除非服务器是使用 构建的 -DWITH_DEBUG,在这种情况下最小值为 1。有效值始终是 8 的倍数;您可以将其设置为不是这样的倍数的值,但服务器在存储该值之前将其向下舍入到 8 的下一个较低倍数。(例外:调试服务器不执行此类舍入。)无论服务器是如何构建的,默认值为 512,允许的最大值为 524280。

  • replica_checkpoint_period

    命令行格式 --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 集群复制中的已知问题”

    此变量与 replica_checkpoint_group 系统变量结合使用,当超过任一限制时,将执行检查点,并重置跟踪事务数量和自上一个检查点以来经过的时间的计数器。

    此变量的最小允许值为 1,除非服务器是使用 构建的 -DWITH_DEBUG,在这种情况下最小值为 0。无论服务器如何构建,默认值为 300 毫秒,最大可能值为 4294967295 毫秒(大约 49.7 天)。

  • replica_compressed_protocol

    命令行格式 --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

    命令行格式 --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模式旨在用于 NDB Cluster Replication 的多源复制、循环复制和其他一些特殊复制场景。(有关更多信息,请参阅 第 23.7.10 节,“NDB 集群复制:双向和循环复制”第 23.7.11 节,“NDB 集群复制冲突解决”。)NDB 集群忽略显式设置的任何值 replica_exec_mode,并始终对其进行处理作为IDEMPOTENT.

    在 MySQL Server 8.0 中,STRICT mode 是默认值。

    设置此变量会立即对所有复制通道生效,包括正在运行的通道。

    对于除 之外的存储引擎 NDBIDEMPOTENT只有当您绝对确定可以安全地忽略重复键错误和未找到键错误时,才应使用模式。它旨在用于使用多源复制或循环复制的 NDB Cluster 的故障转移场景,不建议在其他情况下使用。

  • replica_load_tmpdir

    命令行格式 --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

    命令行格式 --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

    命令行格式 --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

    命令行格式 --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_workersslave_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

    命令行格式 --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_typeor slave_parallel_typereplica_preserve_commit_order or slave_preserve_commit_order 系统变量无效并被忽略。CHANGE REPLICATION SOURCE TO 从 MySQL 8.0.27 开始,如果在副本上启用该选项时禁用并行执行 GTID_ONLY,则副本实际上使用一个并行工作人员来利用该方法重试事务而不访问文件位置。使用一个并行工作者, replica_preserve_commit_orderslave_preserve_commit_order 系统变量也没有影响。

    设置 replica_parallel_workers 没有立竿见影的效果。变量的状态适用于所有后续 START REPLICA语句。

    笔记

    NDB Cluster 当前不支持多线程副本。有关如何 处理此变量设置的 更多信息,请参阅 第 23.7.3 节,“NDB 集群复制中的已知问题” 。NDB

  • replica_pending_jobs_size_max

    命令行格式 --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

    命令行格式 --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 默认情况下),默认情况下也是如此 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 之前的默认设置。在更改 and 的值之前 replica_preserve_commit_orderreplica_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

    命令行格式 --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

    命令行格式 --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's innodb_lock_wait_timeoutNDB's TransactionDeadlockDetectionTimeout 而 无法执行事务TransactionInactiveTimeout,它会自动重试 replica_transaction_retries 几次,然后停止并出现错误。不重试具有非临时错误的事务。

    Performance Schema 表 在列中replication_applier_status 显示了每个复制通道上发生的重试次数 COUNT_TRANSACTIONS_RETRIES。Performance Schema 表 replication_applier_status_by_worker 显示有关单个应用程序线程在单线程或多线程副本上的事务重试的详细信息,并标识导致最后一个事务和当前正在进行的事务被重新尝试的错误。

  • replica_type_conversions

    命令行格式 --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

    命令行格式 --report-host=host_name
    系统变量 report_host
    范围 全局
    动态的
    SET_VAR提示适用
    类型 细绳

    在副本注册期间要报告给源的副本的主机名或 IP 地址。此值出现在 SHOW REPLICAS源服务器上的输出中。如果您不希望副本向源注册自身,请不要设置该值。

    笔记

    在副本连接后,源仅从 TCP/IP 套接字读取副本服务器的 IP 地址是不够的。由于 NAT 和其他路由问题,该 IP 可能无法从源或其他主机连接到副本。

  • report_password

    命令行格式 --report-password=name
    系统变量 report_password
    范围 全局
    动态的
    SET_VAR提示适用
    类型 细绳

    副本注册时要上报给源的副本的账号密码。SHOW REPLICAS如果源以 --show-replica-auth-info或 启动,则此值出现在源服务器上的输出中 --show-slave-auth-info

    尽管此变量的名称可能暗示其他情况, report_password但未连接到 MySQL 用户权限系统,因此不一定(甚至可能)与 MySQL 复制用户帐户的密码相同。

  • report_port

    命令行格式 --report-port=port_num
    系统变量 report_port
    范围 全局
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 [slave_port]
    最小值 0
    最大值 65535

    用于连接副本的 TCP/IP 端口号,在副本注册期间报告给源。仅当副本正在侦听非默认端口或者您有从源或其他客户端到副本的特殊隧道时才设置此选项。如果您不确定,请不要使用此选项。

    此选项的默认值是副本实际使用的端口号。这也是 显示的默认值 SHOW REPLICAS

  • report_user

    命令行格式 --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=#
    系统变量 rpl_read_size
    范围 全局
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 8192
    最小值 8192
    最大值 4294959104
    单元 字节
    块大小 8192

    rpl_read_size系统变量控制从二进制日志文件和中继日志文件读取的最小数据量(以字节为单位) 。如果这些文件的大量磁盘 I/O 活动阻碍了数据库的性能,那么当操作系统当前未缓存文件数据时,增加读取大小可能会减少文件读取和 I/O 停顿。

    的最小值和默认值为 rpl_read_size8192 字节。该值必须是 4KB 的倍数。请注意,为从二进制日志和中继日志文件读取的每个线程分配一个此值大小的缓冲区,包括源上的转储线程和副本上的协调器线程。因此,设置较大的值可能会对服务器的内存消耗产生影响。

  • rpl_semi_sync_replica_enabled

    命令行格式 --rpl-semi-sync-replica-enabled[={OFF|ON}]
    介绍 8.0.26
    系统变量 rpl_semi_sync_replica_enabled
    范围 全局
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    rpl_semi_sync_replica_enabledrpl_semi_sync_replica 在副本上安装( semisync_replica.solibrary) 插件以设置半同步复制 时可用 。如果rpl_semi_sync_slave 插件(semisync_slave.so库)已安装, rpl_semi_sync_slave_enabled 则可用。

    rpl_semi_sync_replica_enabled 控制是否在副本服务器上启用半同步复制。要启用或禁用插件,请将此变量分别设置为ONOFF(或 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_levelrpl_semi_sync_replica 在副本上安装( semisync_replica.solibrary) 插件以设置半同步复制 时可用 。如果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

    命令行格式 --rpl-semi-sync-slave-enabled[={OFF|ON}]
    系统变量 rpl_semi_sync_slave_enabled
    范围 全局
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    rpl_semi_sync_slave_enabledrpl_semi_sync_slave 在副本上安装( semisync_slave.solibrary) 插件以设置半同步复制 时可用。如果rpl_semi_sync_replica 插件(semisync_replica.so库)已安装, rpl_semi_sync_replica_enabled 则可用。

    rpl_semi_sync_slave_enabled 控制是否在副本服务器上启用半同步复制。要启用或禁用插件,请将此变量分别设置为ONOFF(或 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_levelrpl_semi_sync_slave 在副本上安装( semisync_slave.solibrary) 插件以设置半同步复制 时可用。如果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

    命令行格式 --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_timeout31536000 秒(1 年)。最小值为 2 秒。STOP REPLICA对此变量的更改对后续语句 生效 。

    此变量仅影响发出 STOP REPLICA语句的客户端。达到超时时,发出客户端会返回一条错误消息,指出命令执行不完整。客户端然后停止等待复制 I/O(接收器)和 SQL(应用程序)线程停止,但复制线程继续尝试停止,并且 STOP REPLICA指令仍然有效。一旦复制线程不再忙, STOP REPLICA则执行该语句并且副本停止。

  • rpl_stop_slave_timeout

    命令行格式 --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_timeout31536000 秒(1 年)。最小值为 2 秒。STOP REPLICA对此变量的更改对后续语句 生效 。

    此变量仅影响发出 STOP REPLICA语句的客户端。达到超时时,发出客户端会返回一条错误消息,指出命令执行不完整。客户端然后停止等待复制 I/O(接收器)和 SQL(应用程序)线程停止,但复制线程继续尝试停止,并且 STOP REPLICA指令仍然有效。一旦复制线程不再忙, STOP REPLICA则执行该语句并且副本停止。

  • skip_replica_start

    命令行格式 --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

    命令行格式 --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

    命令行格式 --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 集群复制中的已知问题”

    此变量与 slave_checkpoint_period 系统变量结合使用,当超过任一限制时,将执行检查点,并重置跟踪事务数量和自上一个检查点以来经过的时间的计数器。

    此变量的最小允许值为 32,除非服务器是使用 构建的 -DWITH_DEBUG,在这种情况下最小值为 1。有效值始终是 8 的倍数;您可以将其设置为不是这样的倍数的值,但服务器在存储该值之前将其向下舍入到 8 的下一个较低倍数。(例外:调试服务器不执行此类舍入。)无论服务器是如何构建的,默认值为 512,允许的最大值为 524280。

  • slave_checkpoint_period

    命令行格式 --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 集群复制中的已知问题”

    此变量与 slave_checkpoint_group 系统变量结合使用,当超过任一限制时,将执行检查点,并重置跟踪事务数量和自上一个检查点以来经过的时间的计数器。

    此变量的最小允许值为 1,除非服务器是使用 构建的 -DWITH_DEBUG,在这种情况下最小值为 0。无论服务器如何构建,默认值为 300 毫秒,最大可能值为 4294967295 毫秒(大约 49.7 天)。

  • slave_compressed_protocol

    命令行格式 --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 TOCHANGE MASTER TOzlibslave_compressed_protocolSOURCE_COMPRESSION_ALGORITHMS``MASTER_COMPRESSION_ALGORITHMS

    从 MySQL 8.0.18 开始,此系统变量已弃用。您应该期望它在 MySQL 的未来版本中被删除。请参阅 配置旧版连接压缩

  • slave_exec_mode

    命令行格式 --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模式旨在用于 NDB Cluster Replication 的多源复制、循环复制和其他一些特殊复制场景。(有关更多信息,请参阅 第 23.7.10 节,“NDB 集群复制:双向和循环复制”第 23.7.11 节,“NDB 集群复制冲突解决”。)NDB 集群忽略显式设置的任何值 slave_exec_mode,并始终对其进行处理作为IDEMPOTENT.

    在 MySQL Server 8.0 中,STRICT mode 是默认值。

    设置此变量会立即对所有复制通道生效,包括正在运行的通道。

    对于除 之外的存储引擎 NDBIDEMPOTENT只有当您绝对确定可以安全地忽略重复键错误和未找到键错误时,才应使用模式。它旨在用于使用多源复制或循环复制的 NDB Cluster 的故障转移场景,不建议在其他情况下使用。

  • slave_load_tmpdir

    命令行格式 --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

    命令行格式 --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

    命令行格式 --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 TOCHANGE MASTER TOSOURCE_RETRY_COUNT``MASTER_RETRY_COUNT

    心跳间隔,如果连接仍然良好,则停止在没有数据的情况下发生的连接超时,由 SOURCE_HEARTBEAT_PERIOD| 控制。 |MASTER_HEARTBEAT_PERIOD的选项 陈述。心跳间隔默认为 的一半 ,它记录在副本的连接元数据存储库中,并显示在 Performance Schema 表中。请注意,更改的值或默认设置 CHANGE REPLICATION SOURCE TOCHANGE MASTER TOslave_net_timeoutreplication_connection_configurationslave_net_timeout不会自动更改心跳间隔,无论是已明确设置还是使用先前计算的默认值。如果更改连接超时,您还必须发出CHANGE REPLICATION SOURCE TO| CHANGE MASTER TO将心跳间隔调整为适当的值,使其在连接超时之前发生。

  • slave_parallel_type

    命令行格式 --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_workersslave_parallel_workers设置为大于 0 的值的副本), slave_parallel_type 指定用于决定允许哪些事务在副本上并行执行的策略。该变量对未启用多线程的副本没有影响。可能的值是:

    • LOGICAL_CLOCK:作为源上相同二进制日志组提交的一部分的事务在副本上并行应用。根据时间戳跟踪事务之间的依赖关系,以尽可能提供额外的并行化。设置此值时, binlog_transaction_dependency_tracking 可以在源上使用系统变量来指定写入集用于替代时间戳的并行化,如果写入集可用于事务并且与时间戳相比提供改进的结果。
    • DATABASE:更新不同数据库的事务是并行应用的。仅当数据被分区到多个数据库中,这些数据库在源上独立并同时更新时,此值才适用。必须没有跨数据库约束,因为这样的约束可能会在副本上被违反。

    当 设置replica_preserve_commit_order=ON or 时slave_preserve_commit_order=ON ,您只能使用LOGICAL_CLOCK. 在 MySQL 8.0.27 之前,DATABASE是默认的。从 MySQL 8.0.27 开始,默认为副本服务器启用多线程(replica_parallel_workers=4 默认情况下),默认情况下也是如此LOGICAL_CLOCK,设置 replica_preserve_commit_order=ON 也是默认值。

    当您的复制拓扑使用多个级别的副本时,LOGICAL_CLOCK副本远离源的每个级别可能会实现较少的并行化。binlog_transaction_dependency_tracking 您可以通过在源上使用来指定尽可能使用写入集而不是时间戳进行并行化, 从而减少这种影响 。

    binlog_transaction_compression 当使用系统变量 启用二进制日志事务压缩时 ,如果replica_parallel_typeslave_parallel_type设置为DATABASE,则在调度事务之前映射所有受事务影响的数据库。DATABASE与为每个事件映射和调度的未压缩事务相比,将 二进制日志事务压缩与策略一起使用可以降低并行度。

  • slave_parallel_workers

    命令行格式 --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_typeor slave_parallel_typereplica_preserve_commit_order or slave_preserve_commit_order 系统变量无效并被忽略。CHANGE REPLICATION SOURCE TO 从 MySQL 8.0.27 开始,如果在副本上启用该选项时禁用并行执行 GTID_ONLY,则副本实际上使用一个并行工作人员来利用该方法重试事务而不访问文件位置。使用一名并行工作人员, replica_preserve_commit_orderslave_preserve_commit_order) 系统变量也没有影响。

    设置 replica_parallel_workers 没有立竿见影的效果。变量的状态适用于所有后续 START REPLICA语句。

    NDB Cluster 当前不支持多线程副本。有关如何 处理此变量设置的 更多信息,请参阅 第 23.7.3 节,“NDB 集群复制中的已知问题” 。NDB

  • slave_pending_jobs_size_max

    命令行格式 --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

    命令行格式 --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_workersslave_parallel_workers设置为大于 0 的值的副本),设置 slave_preserve_commit_order=1 可确保事务在副本上执行和提交的顺序与它们在副本的中继日志中出现的顺序相同。这可以防止从副本的中继日志中执行的事务序列出现间隙,并在副本上保留与源上相同的事务历史记录(具有下面列出的限制)。此变量对未启用多线程的副本没有影响。

    在 MySQL 8.0.27 之前,此系统变量的默认值为 OFF,这意味着事务可能会乱序提交。从 MySQL 8.0.27 开始,默认为副本服务器启用多线程(replica_parallel_workers=4 默认情况下),默认情况下也是如此 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

    命令行格式 --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

    命令行格式 --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

    命令行格式 --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

    命令行格式 --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

    命令行格式 --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's innodb_lock_wait_timeoutNDB's TransactionDeadlockDetectionTimeout 而 无法执行事务TransactionInactiveTimeout,它会自动重试 slave_transaction_retries 几次,然后停止并出现错误。不重试具有非临时错误的事务。

    Performance Schema 表 在列中replication_applier_status 显示了每个复制通道上发生的重试次数 COUNT_TRANSACTIONS_RETRIES。Performance Schema 表 replication_applier_status_by_worker 显示有关单个应用程序线程在单线程或多线程副本上的事务重试的详细信息,并标识导致最后一个事务和当前正在进行的事务被重新尝试的错误。

  • slave_type_conversions

    命令行格式 --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。将此变量设置为空字符串以禁止源和副本之间的类型转换。设置此变量会立即对所有复制通道生效,包括正在运行的通道。

    有关适用于基于行的复制中的属性提升和降级的类型转换模式的更多信息,请参阅 基于行的复制:属性提升和降级

  • sql_replica_skip_counter

    介绍 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 TOsql_replica_skip_counter

    重要的

    如果跳过通过设置此变量指定的事件数会导致副本在事件组的中间开始,则副本将继续跳过,直到找到下一个事件组的开始并从该点开始。有关更多信息,请参阅 第 17.1.7.3 节,“跳过事务”

  • sql_slave_skip_counter

    已弃用 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 TOsql_slave_skip_counter

    重要的

    如果跳过通过设置此变量指定的事件数会导致副本在事件组的中间开始,则副本将继续跳过,直到找到下一个事件组的开始并从该点开始。有关更多信息,请参阅 第 17.1.7.3 节,“跳过事务”

  • sync_master_info

    命令行格式 --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=#
    系统变量 sync_relay_log
    范围 全局
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 10000
    最小值 0
    最大值 4294967295

    如果此变量的值大于 0,则 MySQL 服务器会 fdatasync()在每个 sync_relay_log事件写入中继日志后将其中继日志同步到磁盘(使用 )。设置此变量会立即对所有复制通道生效,包括正在运行的通道。

    设置sync_relay_log为 0 会导致不同步到磁盘;在这种情况下,服务器依赖操作系统不时刷新中继日志的内容,就像任何其他文件一样。

    值 1 是最安全的选择,因为在意外停止的情况下,您最多会丢失中继日志中的一个事件。然而,它也是最慢的选择(除非磁盘有电池支持的缓存,这使得同步非常快)。有关对意外停止最具弹性的副本上的设置组合的信息,请参阅 第 17.4.2 节,“处理副本的意外停止”

  • sync_relay_log_info

    命令行格式 --sync-relay-log-info=#
    系统变量 sync_relay_log_info
    范围 全局
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 10000
    最小值 0
    最大值 4294967295

    副本更新应用程序元数据存储库之后的事务数。当应用程序元数据存储库存储为 InnoDB表时,这是 MySQL 8.0 的默认值,它在每次事务后更新,并且忽略此系统变量。如果应用程序元数据存储库存储为文件,从 MySQL 8.0 开始不推荐使用,则副本 在此数量的事务之后将其relay-log.info文件同步到磁盘(使用 )。fdatasync()默认值为 sync_relay_log_info是 10000,零值表示文件内容仅由操作系统刷新。设置此变量会立即对所有复制通道生效,包括正在运行的通道。

  • sync_source_info

    命令行格式 --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

    命令行格式 --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 ” (用于“多线程从属” ),改为“ mta ”(表示“多线程应用程序”)。使用这些检测名称的监控工具可能会受到影响。如果不兼容的更改对您有影响,请将 terminology_use_previous 系统变量设置为BEFORE_8_0_26以使 MySQL Server 使用旧版本的名称来指定上一个列表中指定的对象。这使得依赖旧名称的监控工具能够继续工作,直到它们可以更新以使用新名称。

    terminology_use_previous 系统变量设置为会话范围以支持单个功能,或将全局范围设置为所有新会话的默认值。当使用全局范围时,慢查询日志包含旧版本的名称。

    受影响的仪器名称在以下列表中给出。terminology_use_previous 系统变量只影响这些项目。 它不影响 MySQL 8.0.26 中也引入的系统变量、状态变量和命令行选项的新别名,并且在设置时仍然可以使用这些别名。

    • 检测锁(互斥锁),在带有前缀的 mutex_instancesPerformance events_waits_*Schema 表中 可见wait/synch/mutex/
    • 读/写锁,在 带有前缀的性能模式表中 rwlock_instances可见 events_waits_*``wait/synch/rwlock/
    • 插桩条件变量,在带有前缀的性能模式表 cond_instances中 可见 events_waits_*``wait/synch/cond/
    • 检测内存分配,在 memory_summary_*性能模式表中可见,前缀为memory/sql/
    • threads 线程名称,在Performance Schema 表中 可见,带有前缀thread/sql/
    • 线程阶段,在带前缀的性能模式表中可见,在 events_stages_*性能模式表和性能模式表中不带 前缀stage/sql/,语句的输出,信息模式 表和慢查询日志 threads``processlist``SHOW PROCESSLIST``processlist
    • events_statements_history*线程命令,在带前缀的和 性能模式表 中可见,在 性能 events_statements_summary_*_by_event_name 模式表中 statement/com/不带前缀,语句的输出,信息模式 表和 语句 的输出threads``processlist``SHOW PROCESSLIST``processlist``SHOW REPLICA STATUS
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论