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