Documentation Home

17.1.4.3 副本服务器选项和变量

命令行选项文件中指定选项。许多选项可以在服务器运行时使用该 CHANGE MASTER TO语句进行设置。使用指定系统变量值 SET

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

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

本节介绍用于控制副本的启动选项。可以在服务器运行时使用CHANGE MASTER TO 语句设置其中许多选项。其他的,比如--replicate-* 选项,只能在副本服务器启动时设置。与复制相关的系统变量将在本节后面讨论。

  • --abort-slave-event-count

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

    当此选项设置为 value0(默认值)以外的某个正整数时,它会影响复制行为,如下所示:复制 SQL 线程启动后, value允许执行日志事件;之后,复制 SQL 线程不再接收任何事件,就像来自源的网络连接被切断一样。线程继续运行,输出SHOW SLAVE STATUS显示YesSlave_IO_RunningSlave_SQL_Running列中,但不会从中继日志中读取更多事件。

    MySQL 测试套件在内部使用此选项进行复制测试和调试。它不适用于生产环境。

  • --disconnect-slave-event-count

    命令行格式 --disconnect-slave-event-count=#
    类型 整数
    默认值 0

    MySQL 测试套件在内部使用此选项进行复制测试和调试。它不适用于生产环境。

  • --log-slow-slave-statements

    命令行格式 --log-slow-slave-statements[={OFF|ON}](5.6.10)
    删除 5.6.11
    类型 布尔值
    默认值 OFF

    这个命令行选项在 MySQL 5.6.11 中被移除,并被 log_slow_slave_statements 系统变量取代。系统变量可以像选项一样在命令行或选项文件中设置,因此不需要在服务器启动时进行任何更改,但系统变量还可以在运行时检查或设置值。

  • --log-warnings[=level]

    命令行格式 --log-warnings[=#]
    系统变量 log_warnings
    范围 全球的
    动态的 是的
    类型 整数
    默认值 1
    最小值 0
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295

    使服务器在错误日志中记录更多有关其正在执行的操作的消息。关于复制,服务器会生成警告,表明它在网络或连接失败后成功重新连接,并提供有关每个复制线程如何启动的信息。默认情况下启用此选项 (1);要禁用它,请使用 --log-warnings=0. 如果该值大于 1,则将中止的连接写入错误日志,并写入新连接尝试的拒绝访问错误。请参阅 第 B.3.2.10 节,“通信错误和中止连接”

    笔记

    此选项的影响不仅限于复制。它会影响一系列服务器活动的诊断消息。

  • --master-info-file=file_name

    命令行格式 --master-info-file=file_name
    类型 文件名
    默认值 master.info

    用于副本记录有关复制源服务器信息的文件的名称。默认名称master.info在数据目录中。有关此文件格式的信息,请参阅第 17.2.2.2 节,“复制元数据存储库”

  • --master-retry-count=count

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

    副本在放弃之前尝试连接到复制源服务器的次数。MASTER_CONNECT_RETRY以语句选项 设置的时间间隔尝试重新连接 CHANGE MASTER TO(默认为 60)。当副本达到其连接超时(由 slave_net_timeout系统变量指定)而没有从源接收数据时,将触发重新连接尝试。默认值为 86400。值为 0 表示 无限;副本尝试永远连接。

    此选项已弃用;希望在未来的 MySQL 版本中将其删除。应用程序应该更新为使用 语句 的MASTER_RETRY_COUNT选项 。CHANGE MASTER TO

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

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

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

  • --relay-log-purge={0|1}

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

    一旦不再需要,就禁用或启用中继日志的自动清除。默认值为 1(启用)。这是一个全局变量,可以使用 动态更改。启用该选项时禁用清除中继日志 会使数据一致性面临风险。 SET GLOBAL relay_log_purge = N--relay-log-recovery

  • --relay-log-space-limit=size

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

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

    此选项的效果取决于使用的是基于语句的复制还是基于行的复制。

    基于语句的复制。  告诉复制 SQL 线程将复制限制为默认数据库(即由 选定的数据库USE) 为 的语句db_name。要指定多个数据库,请多次使用此选项,每个数据库一次;但是,这样做 不会复制跨数据库语句,例如选择不同的数据库(或没有选择数据库)。 UPDATE some_db.some_table SET foo='bar'

    警告

    要指定多个数据库,您 必须使用此选项的多个实例。因为数据库名称可以包含逗号,所以如果您提供逗号分隔列表,则该列表将被视为单个数据库的名称。

    使用基于语句的复制时无法正常工作的示例:如果副本启动--replicate-do-db=sales 并在源上发出以下语句, UPDATE不会复制该语句:

    USE prices;
    UPDATE sales.january SET amount=amount+1000;

    这种“只检查默认数据库行为 的主要原因是,很难仅从语句中知道它是否应该被复制(例如,如果您正在使用多表 DELETE语句或UPDATE 跨多个操作的多表语句数据库)。如果没有必要,只检查默认数据库而不是所有数据库也会更快。

    基于行的复制。  告诉复制 SQL 线程限制复制到数据库db_name。只有属于的表db_name被更改;当前数据库对此没有影响。假设副本启动 --replicate-do-db=sales并且基于行的复制生效,然后在源上运行以下语句:

    USE prices;
    UPDATE sales.february SET amount=amount+100;

    replica上的数据库中的februarysales是按照UPDATE 语句改变的;无论 USE声明是否发布,都会发生这种情况。但是,在使用基于行的复制和时,在源上发出以下语句对副本没有影响--replicate-do-db=sales

    USE prices;
    UPDATE prices.march SET amount=amount-25;

    即使将语句USE prices更改为USE salesUPDATE语句的效果仍然不会被复制。

    --replicate-do-db与基于行的复制相比,基于语句的复制的处理方式的 另一个重要区别 在于引用多个数据库的语句。假设副本以 开始 --replicate-do-db=db1,并在源上执行以下语句:

    USE db1;
    UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;

    如果您使用的是基于语句的复制,那么两个表都会在副本上更新。但是,当使用基于行的复制时,只会table1影响副本;因为table2在不同的数据库中,table2所以副本不会被 UPDATE. 现在假设使用USE db1了一个 USE db4语句而不是语句:

    USE db4;
    UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;

    在这种情况下,UPDATE 当使用基于语句的复制时,该语句对副本没有影响。但是,如果您使用的是基于行的复制, 副本UPDATE会发生变化 table1,但不会 table2——换句话说,只有命名为 的数据库中的表 --replicate-do-db会发生变化,默认数据库的选择对此行为没有影响。

    如果您需要跨数据库更新才能工作,请 改用。请参阅第 17.2.3 节,“服务器如何评估复制过滤规则”--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
    类型 细绳

    与 一样--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.3 节,“服务器如何评估复制过滤规则”

    如果您需要跨数据库更新才能工作,请 改用。请参阅第 17.2.3 节,“服务器如何评估复制过滤规则”--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.3 节,“服务器如何评估复制过滤规则”

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

  • --replicate-ignore-table=db_name.tbl_name

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

    通过告诉复制 SQL 线程不要复制任何更新指定表的语句来创建复制过滤器,即使任何其他表可能由同一语句更新。要指定要忽略的多个表,请多次使用此选项,每个表一次。这适用于跨数据库更新,与 --replicate-ignore-db. 请参阅 第 17.2.3 节,“服务器如何评估复制过滤规则”

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

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

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

    告诉副本创建一个复制过滤器,将指定的数据库转换为 to_name它是否 from_name在源上。只有涉及表的语句会受到影响,而 、 和 等语句不会CREATE DATABASE受到 DROP DATABASE影响 ALTER DATABASE

    要指定多次重写,请多次使用此选项。服务器使用具有 from_name匹配值的第一个。数据库名称翻译 在 测试规则之前完成。--replicate-*您还可以通过发出 CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB语句来创建这样的过滤器。

    如果您 --replicate-rewrite-db在命令行上使用该选项并且该> 字符对于您的命令解释器来说是特殊的,请引用该选项值。例如:

    $> mysqld --replicate-rewrite-db="olddb->newdb"

    --replicate-rewrite-db选项的效果因查询使用的是基于语句还是基于行的二进制日志记录格式而异。使用基于语句的格式,DML 语句根据语句指定的当前数据库进行转换 USE。使用基于行的格式,DML 语句根据修改表所在的数据库进行转换。DDL 语句始终根据 USE语句指定的当前数据库进行过滤,而不管二进制日志记录格式如何。

    为确保重写产生预期结果,尤其是与其他复制过滤选项结合使用时,请在使用该 --replicate-rewrite-db 选项时遵循以下建议:

    • 使用不同的名称在源和副本上手动 创建from_name和 数据库。to_name

    • 如果您使用基于语句或混合二进制日志记录格式,请不要使用跨数据库查询,并且不要在查询中指定数据库名称。对于DDL和DML语句,依赖 USE语句指定当前数据库,查询时只使用表名。

    • 如果独占使用基于行的二进制日志记录格式,对于 DDL 语句,依赖 USE语句指定当前数据库,并且在查询中仅使用表名。对于 DML 语句,您可以根据需要使用完全限定的表名 ( db. table)。

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

  • --replicate-same-server-id

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

    用于副本服务器。通常您应该使用默认设置 0,以防止循环复制引起的无限循环。如果设置为 1,则副本不会跳过具有自己服务器 ID 的事件。通常,这仅在罕见的配置中有用。log_slave_updates如果启用,则不能设置为 1 。默认情况下,复制 I/O 线程不会将二进制日志事件写入中继日志,如果它们具有副本的服务器 ID(此优化有助于节省磁盘使用量)。如果要使用 --replicate-same-server-id,请确保在使副本读取自己希望复制 SQL 线程执行的事件之前使用此选项启动副本。

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

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

    通过告知复制 SQL 线程将复制限制为任何已更新表与指定数据库和表名称模式匹配的语句来创建复制过滤器。模式可以包含%_通配符,其含义与LIKE 模式匹配运算符相同。要指定多个表,请多次使用此选项,每个表一次。这适用于跨数据库更新。请参阅 第 17.2.3 节,“服务器如何评估复制过滤规则”

    此选项适用于表、视图和触发器。它不适用于存储过程和函数或事件。要过滤对后面的对象进行操作的语句,请使用一个或多个--replicate-*-db选项。

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

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

    创建一个复制过滤器,防止复制 SQL 线程复制任何表与给定通配符模式匹配的语句。要指定要忽略的多个表,请多次使用此选项,每个表一次。这适用于跨数据库更新。请参阅 第 17.2.3 节,“服务器如何评估复制过滤规则”

    示例: --replicate-wild-ignore-table=foo%.bar% 不复制使用数据库名称以开头foo且表名称以 开头的表的更新bar

    有关匹配如何工作的信息,请参阅 --replicate-wild-do-table 选项的描述。在选项值中包含文字通配符的规则也与 for 相同 --replicate-wild-ignore-table

  • --skip-slave-start

    命令行格式 --skip-slave-start[={OFF|ON}]
    系统变量 skip_slave_start
    范围 全球的
    动态的
    类型 布尔值
    默认值 OFF

    告诉副本服务器在服务器启动时不要启动复制线程。要稍后启动线程,请使用START SLAVE语句。

  • --slave-skip-errors=[err_code1,err_code2,...|all|ddl_exist_errors]

    命令行格式 --slave-skip-errors=name
    系统变量 slave_skip_errors
    范围 全球的
    动态的
    类型 细绳
    默认值 OFF
    有效值

    OFF

    [list of error codes]

    all

    ddl_exist_errors

    通常,复制会在副本发生错误时停止。这使您有机会手动解决数据中的不一致问题。此选项告诉复制 SQL 线程在语句返回选项值中列出的任何错误时继续复制。

    除非您完全理解为什么会出错,否则不要使用此选项。如果您的复制设置和客户端程序没有错误,并且 MySQL 本身也没有错误,那么停止复制的错误应该永远不会发生。不加选择地使用此选项会导致副本与源完全不同步,而您不知道为什么会发生这种情况。

    对于错误代码,您应该使用副本的错误日志和 的输出中的错误消息提供的数字SHOW SLAVE STATUS附录 B,错误消息和常见问题,列出了服务器错误代码。

    您也可以(但不应该)使用非常不推荐的值all来使副本忽略所有错误消息并继续运行而不管发生什么。不用说,如果您使用all,则无法保证数据的完整性。在这种情况下,如果副本的数据与源上的数据相去甚远,请不要抱怨(或提交错误报告)。你已被警告

    MySQL 5.6 以及 MySQL NDB Cluster 7.3 及更高版本支持额外的简写值 ddl_exist_errors,相当于错误代码列表 1007,1008,1050,1051,1054,1060,1061,1068,1094,1146

    NDB由于检查纪元序列号 的内部机制,在 NDB 集群之间复制时,此选项不会以相同的方式工作 ;一旦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 5.6 及更高版本支持将副本状态信息记录到表而不是文件中。副本的连接元数据存储库和应用程序元数据存储库的写入可以使用这两个系统变量单独配置:

有关这些变量的信息,请参阅 第 17.1.4.3 节,“副本服务器选项和变量”

复制元数据存储库及其内容被认为是给定 MySQL 服务器的本地。它们不会被复制,对它们的更改也不会写入二进制日志。

有关详细信息,请参阅第 17.2.2 节,“中继日志和复制元数据存储库”

过时的副本选项

以下选项已被删除并替换为CHANGE MASTER TO ... 语句的功能(请参阅第 13.4.2.1 节,“CHANGE MASTER TO 语句”)。如果您尝试在 MySQL 5.6 中使用这些选项中的任何一个 启动mysqld ,服务器将中止并出现未知变量错误。

  • --master-host

  • --master-user

  • --master-password

  • --master-port

  • --master-connect-retry

  • --master-ssl

  • --master-ssl-ca

  • --master-ssl-capath

  • --master-ssl-cert

  • --master-ssl-cipher

  • --master-ssl-key

副本服务器上使用的系统变量

以下列表描述了用于控制副本服务器的系统变量。它们可以在服务器启动时设置,其中一些可以在运行时使用 SET. 与副本一起使用的服务器选项已在本节前面列出。

  • init_slave

    命令行格式 --init-slave=name
    系统变量 init_slave
    范围 全球的
    动态的 是的
    类型 细绳

    该变量类似于 init_connect,但是是一个字符串,每次复制 SQL 线程启动时由副本服务器执行。init_connect字符串的格式与变量 的格式相同 。

    笔记

    复制 SQL 线程在执行之前向客户端发送确认 init_slave。因此,返回时不保证 init_slave已经执行START SLAVE 。有关详细信息,请参阅第 13.4.2.5 节,“START SLAVE 语句”

  • log_slow_slave_statements

    命令行格式 --log-slow-slave-statements[={OFF|ON}]
    介绍 5.6.11
    系统变量 log_slow_slave_statements
    范围 全球的
    动态的 是的
    类型 布尔值
    默认值 OFF

    long_query_time启用慢速查询日志后,此变量将启用对在副本上执行时间 超过几秒的查询的日志记录 。请注意,如果基于行的复制正在使用 ( binlog_format=ROW), log_slow_slave_statements 则无效。只有在二进制日志中以语句格式记录查询时,查询才会添加到副本的慢查询日志中,即 binlog_format=STATEMENT设置为 when 时,或者 binlog_format=MIXED设置为 statement 格式时记录语句。设置时以行格式记录的慢速查询 binlog_format=MIXED,或记录时 binlog_format=ROW已设置,即使 log_slow_slave_statements 已启用,也不会添加到副本的慢查询日志中。

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

  • master_info_repository

    命令行格式 --master-info-repository={FILE|TABLE}
    系统变量 master_info_repository
    范围 全球的
    动态的 是的
    类型 细绳
    默认值 FILE
    有效值

    FILE

    TABLE

    此变量的设置决定了副本服务器是将源状态和连接信息记录到 FILE( master.info) 还是TABLE ( mysql.slave_master_info)。

    该变量的设置也直接影响 sync_master_info系统变量设置的效果;有关详细信息,请参阅该变量描述。

    对于日志记录,您可以使用服务器选项 FILE更改文件的名称 。--master-info-file

  • max_relay_log_size

    命令行格式 --max-relay-log-size=#
    系统变量 max_relay_log_size
    范围 全球的
    动态的 是的
    类型 整数
    默认值 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.1 节,“复制线程”

  • relay_log

    命令行格式 --relay-log=file_name
    系统变量 relay_log
    范围 全球的
    动态的
    类型 文件名

    中继日志的基本名称。默认的基本名称是 host_name-relay-bin.

    服务器将文件写入数据目录,除非给定基本名称和前导绝对路径名以指定不同的目录。服务器通过向基本名称添加数字后缀来按顺序创建中继日志文件。

    由于 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
    范围 全球的
    动态的
    类型 文件名
    默认值 datadir + '/' + hostname + '-relay-bin'

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

  • relay_log_index

    命令行格式 --relay-log-index=file_name
    系统变量 relay_log_index
    范围 全球的
    动态的
    类型 文件名
    默认值 *host_name*-relay-bin.index

    中继日志索引文件的名称。最大可变长度为 256。默认名称 host_name-relay-bin.index 在数据目录中,其中 host_name是副本服务器的名称。

    由于 MySQL 解析服务器选项的方式,如果您在服务器启动时指定此变量,则必须提供一个值;仅当未实际指定该选项时才使用默认基本名称。如果relay_log_index在服务器启动时指定系统变量而不指定值,则可能会导致意外行为;此行为取决于使用的其他选项、​​指定它们的顺序以及它们是在命令行上还是在选项文件中指定。有关 MySQL 如何处理服务器选项的更多信息,请参阅 第 4.2.2 节,“指定程序选项”

  • relay_log_info_file

    命令行格式 --relay-log-info-file=file_name
    系统变量 relay_log_info_file
    范围 全球的
    动态的
    类型 文件名
    默认值 relay-log.info

    副本记录有关中继日志信息的文件的名称。默认名称 relay-log.info在数据目录中。有关此文件格式的信息,请参阅 第 17.2.2.2 节,“复制元数据存储库”

  • relay_log_info_repository

    命令行格式 --relay-log-info-repository=value
    系统变量 relay_log_info_repository
    范围 全球的
    动态的 是的
    类型 细绳
    默认值 FILE
    有效值

    FILE

    TABLE

    这个变量决定了副本在中继日志中的位置是写到FILE ( relay-log.info) 还是 写到TABLE ( mysql.slave_relay_log_info)。

    该变量的设置也直接影响 sync_relay_log_info系统变量设置的效果;有关详细信息,请参阅该变量说明。

    此选项可用于使副本对意外停止具有弹性。有关详细信息,请参阅 第 17.3.2 节,“处理副本服务器的意外停止”

  • relay_log_purge

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

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

  • relay_log_recovery

    命令行格式 --relay-log-recovery[={OFF|ON}]
    系统变量 relay_log_recovery
    范围 全球的
    动态的
    类型 布尔值
    默认值 OFF

    如果启用,此变量会在服务器启动后立即启用自动中继日志恢复。恢复过程创建一个新的中继日志文件,将 SQL 线程位置初始化到这个新的中继日志,并将 I/O 线程初始化到 SQL 线程位置。然后继续从源读取中继日志。这个全局变量在运行时是只读的。它的值可以 --relay-log-recovery在副本启动时使用选项设置,应该在副本意外停止后使用,以确保不会处理可能损坏的中继日志。可以启用此选项以使副本对意外停止具有弹性。看 有关更多信息 ,请参见第 17.3.2 节“处理副本服务器的意外停止” 。

    此变量还与变量交互 relay_log_purge,后者控制在不再需要日志时清除日志。启用 relay_log_recoverywhen relay_log_purgeis disabled 可能会从未清除的文件中读取中继日志,从而导致数据不一致。

    当启用并且副本由于在多线程模式下运行时遇到错误而停止时,如果日志中有任何间隙,relay_log_recovery则无法执行。CHANGE MASTER TO这种情况下的解决方案是发出 START SLAVE UNTIL SQL_AFTER_MTS_GAPS确保在切换回单线程模式或执行CHANGE MASTER TO 语句之前处理所有间隙。

  • relay_log_space_limit

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

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

  • report_host

    命令行格式 --report-host=host_name
    系统变量 report_host
    范围 全球的
    动态的
    类型 细绳

    在副本注册期间要报告给复制源服务器的副本的主机名或 IP 地址。该值出现在 SHOW SLAVE HOSTS源服务器上的输出中。如果您不希望副本向源注册自己,请保留该值。

    笔记

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

  • report_password

    命令行格式 --report-password=name
    系统变量 report_password
    范围 全球的
    动态的
    类型 细绳

    在副本注册期间要报告给源的帐户密码。SHOW SLAVE HOSTS如果源是从 开始的,则 此值出现在源上的输出中 --show-slave-auth-info

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

  • report_port

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

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

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

  • report_user

    命令行格式 --report-user=name
    系统变量 report_user
    范围 全球的
    动态的
    类型 细绳

    在副本注册期间要报告给复制源服务器的副本的帐户用户名。SHOW SLAVE HOSTS如果源是从 开始的,则 此值出现在源上的输出中--show-slave-auth-info

    尽管此变量的名称可能另有含义, report_user但未连接到 MySQL 用户权限系统,因此不一定(甚至可能)与 MySQL 复制用户帐户的名称相同。

  • rpl_semi_sync_slave_enabled

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

    控制是否在副本上启用半同步复制。要启用或禁用插件,请分别将此变量设置为ONOFF (或 1 或 0)。默认值为 OFF

    此变量仅在安装了副本端半同步复制插件时可用。

  • rpl_semi_sync_slave_trace_level

    命令行格式 --rpl-semi-sync-slave-trace-level=#
    系统变量 rpl_semi_sync_slave_trace_level
    范围 全球的
    动态的 是的
    类型 整数
    默认值 32
    最小值 0
    最大值 4294967295

    副本上的半同步复制调试跟踪级别。请参阅 rpl_semi_sync_master_trace_level 允许值。

    此变量仅在安装了副本端半同步复制插件时可用。

  • rpl_stop_slave_timeout

    命令行格式 --rpl-stop-slave-timeout=#
    介绍 5.6.13
    系统变量 rpl_stop_slave_timeout
    范围 全球的
    动态的 是的
    类型 整数
    默认值 31536000
    最小值 2
    最大值 31536000
    单元

    STOP SLAVE在 MySQL 5.6.13 及更高版本中,您可以通过设置此变量来控制超时前等待 的时间长度(以秒为单位) 。这可用于避免 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
    范围 全球的
    动态的 是的
    类型 整数
    默认值 512
    最小值 32
    最大值 524280
    块大小 8

    设置在调用检查点操作以更新其状态之前多线程副本可以处理的最大事务数,如 所示 SHOW SLAVE STATUS。设置此变量对未启用多线程的副本没有影响。

    笔记

    NDB Cluster 目前不支持多线程副本,它会默默地忽略此变量的设置。有关更多信息,请参阅 第 18.7.3 节,“NDB Cluster 复制中的已知问题”

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

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

  • slave_checkpoint_period

    命令行格式 --slave-checkpoint-period=#
    系统变量 slave_checkpoint_period
    范围 全球的
    动态的 是的
    类型 整数
    默认值 300
    最小值 1
    最大值 4294967295
    单元 毫秒

    设置在调用检查点操作以更新多线程副本的状态之前允许经过的最长时间(以毫秒为单位),如 所示 SHOW SLAVE STATUS。设置此变量对未启用多线程的副本没有影响。

    笔记

    NDB Cluster 目前不支持多线程副本,它会默默地忽略此变量的设置。有关更多信息,请参阅 第 18.7.3 节,“NDB Cluster 复制中的已知问题”

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

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

  • slave_compressed_protocol

    命令行格式 --slave-compressed-protocol[={OFF|ON}]
    系统变量 slave_compressed_protocol
    范围 全球的
    动态的 是的
    类型 布尔值
    默认值 OFF

    如果源和副本都支持,是否使用源/副本协议的压缩。如果此变量被禁用(默认),连接将被解压缩。另见第 4.2.6 节,“连接压缩控制”

  • slave_exec_mode

    命令行格式 --slave-exec-mode=mode
    系统变量 slave_exec_mode
    范围 全球的
    动态的 是的
    类型 枚举
    默认值

    IDEMPOTENT(新开发银行)

    STRICT(其他)

    有效值

    STRICT

    IDEMPOTENT

    控制复制线程如何解决复制期间的冲突和错误。IDEMPOTENT 模式导致抑制重复键和未找到键的错误;STRICT意味着不会发生这种抑制。

    IDEMPOTENTmode 旨在用于 NDB Cluster Replication 的多源复制、循环复制和其他一些特殊复制场景。(有关更多信息,请参阅 第 18.7.10 节,“NDB Cluster 复制:双向和循环复制”第 18.7.11 节,“NDB Cluster 复制冲突解决”。)NDB Cluster 忽略为明确设置的任何值 slave_exec_mode,并始终将其视为作为IDEMPOTENT

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

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

  • slave_load_tmpdir

    命令行格式 --slave-load-tmpdir=dir_name
    系统变量 slave_load_tmpdir
    范围 全球的
    动态的
    类型 目录名称
    默认值 Value of --tmpdir

    副本在其中创建临时文件的目录的名称。设置此变量会立即对所有复制通道生效,包括正在运行的通道。默认情况下,变量值等于tmpdir系统变量的值,或者在未指定该系统变量时应用的默认值。

    复制 SQL 线程在复制一条 LOAD DATA语句时,会从中继日志中提取要加载的文件到临时文件中,然后将这些文件加载​​到表中。如果源上加载的文件很大,则副本上的临时文件也很大。因此,建议使用此选项告诉副本将临时文件放在某个具有大量可用空间的文件系统中的目录中。在那种情况下,中继日志也很大,因此您可能还需要设置 relay_log系统变量以将中继日志放置在该文件系统中。

    此选项指定的目录应位于基于磁盘的文件系统(而不是基于内存的文件系统)中,以便用于复制 LOAD DATA语句的临时文件可以在机器重新启动后继续存在。该目录也不应该是在系统启动过程中被操作系统清除的目录。但是,如果临时文件已被删除,复制现在可以在重新启动后继续。

  • slave_max_allowed_packet

    命令行格式 --slave-max-allowed-packet=#
    系统变量 slave_max_allowed_packet
    范围 全球的
    动态的 是的
    类型 整数
    默认值 1073741824
    最小值 1024
    最大值 1073741824
    单元 字节
    块大小 1024

    此变量设置复制 SQL 和 I/O 线程的最大数据包大小,以便使用基于行的复制的大型更新不会导致复制失败,因为更新超出了 max_allowed_packet

    这个全局变量的值始终是 1024 的正整数倍;如果您将其设置为某个不是的值,则该值将向下舍入为下一个最高的 1024 倍数,因为它已被存储或使用;设置 slave_max_allowed_packet为 0 会导致使用 1024。(在所有此类情况下都会发出截断警告。)默认值和最大值为 1073741824 (1 GB);最小值为 1024。

  • slave_net_timeout

    命令行格式 --slave-net-timeout=#
    系统变量 slave_net_timeout
    范围 全球的
    动态的 是的
    类型 整数
    默认值 3600
    最小值 1
    最大值 31536000
    单元

    在副本认为连接断开、中止读取并尝试重新连接之前等待来自源的更多数据的秒数。第一次重试在超时后立即发生。重试之间的间隔由语句的MASTER_CONNECT_RETRY 选项控制CHANGE MASTER TO,重新连接尝试的次数受 --master-retry-count选项限制。默认值为 3600 秒(一小时)。

  • slave_parallel_workers

    命令行格式 --slave-parallel-workers=#
    系统变量 slave_parallel_workers
    范围 全球的
    动态的 是的
    类型 整数
    默认值 0
    最小值 0
    最大值 1024

    设置副本上用于并行执行复制事件(事务)的工作线程数。将此变量设置为 0(默认值)会禁用并行执行。最大值为 1024。

    笔记

    NDB Cluster 目前不支持多线程副本,它会默默地忽略此变量的设置。有关更多信息,请参阅 第 18.7.3 节,“NDB Cluster 复制中的已知问题”

    启用并行执行时,复制 SQL 线程充当工作线程的协调器,其中事务按数据库分布。这意味着副本上的工作线程可以处理给定数据库上的连续事务,而无需等待对其他数据库的更新完成。副本上多线程的当前实现假定数据按数据库分区,并且给定数据库内的更新以与源上相同的相对顺序发生,以便正常工作。但是,不需要在任何两个数据库之间协调事务。

    由于不同数据库上的事务在副本上的发生顺序可能与在源上的顺序不同,因此检查最近执行的事务并不能保证来自源的所有先前事务都已在副本上执行。这对使用多线程副本时的日志记录和恢复有影响。有关在副本上使用多线程时如何解释二进制日志记录信息的信息,请参阅 第 13.7.5.35 节,“SHOW SLAVE STATUS 语句”。此外,这意味着START SLAVE UNTIL多线程副本不支持它。

    启用多线程时, slave_transaction_retries 被视为等于 0,并且无法更改。(目前,多线程副本不支持重试事务。)

    您还应该注意,在不同数据库中的表之间强制执行外键关系会导致多线程副本使用顺序模式而不是并行模式,这会对性能产生负面影响。(漏洞 #14092635)

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

  • slave_pending_jobs_size_max

    命令行格式 --slave-pending-jobs-size-max=#
    系统变量 slave_pending_jobs_size_max
    范围 全球的
    动态的 是的
    类型 整数
    默认值 16M
    最小值 1024
    最大值 16EiB
    单元 字节
    块大小 1024

    对于多线程副本,此变量设置副本上持有尚未应用的事件的工作队列可用的最大内存量(以字节为单位)。设置此变量对未启用多线程的副本没有影响。

    此变量的最小可能值为 1024;默认值为 16MB。最大可能值为 18446744073709551615(16 艾字节)。在存储之前,不是 1024 的精确倍数的值将向下舍入为 1024 的下一个最高倍数。

    此变量的值是一个软限制,可以设置为与正常工作负载相匹配。如果一个异常大的事件超过了这个大小,事务将被暂停,直到副本上的所有工作线程都有空队列,然后才被处理。所有后续交易都将暂停,直到大笔交易完成。

  • slave_rows_search_algorithms

    命令行格式 --slave-rows-search-algorithms=value
    系统变量 slave_rows_search_algorithms
    范围 全球的
    动态的 是的
    类型
    默认值 TABLE_SCAN,INDEX_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指定列表, TABLE_SCAN, 中任意 2 个(或所有 3 个)值的逗号分隔列表HASH_SCAN。该值应为字符串,因此如果在运行时而不是在服务器启动时设置,则必须引用该值。此外,该值不得包含任何空格。可能的组合(列表)及其效果如下表所示:

    使用的索引/选项值 INDEX_SCAN,HASH_SCAN或者 INDEX_SCAN,TABLE_SCAN,HASH_SCAN INDEX_SCAN,TABLE_SCAN TABLE_SCAN,HASH_SCAN
    主键或唯一键 索引扫描 索引扫描 哈希扫描索引
    (其他)键 哈希扫描索引 索引扫描 哈希扫描索引
    无索引 哈希扫描 表格扫描 哈希扫描

    算法在列表中指定的顺序与它们在SELECTor SHOW VARIABLES语句中显示的顺序没有区别(这与前面显示的表中使用的顺序相同)。

    • 默认值为 TABLE_SCAN,INDEX_SCAN,这意味着所有可以使用索引的搜索都使用它们,而没有任何索引的搜索使用表扫描。

    • 要对不使用主键或唯一键的任何搜索使用哈希,请将此选项设置为 INDEX_SCAN,HASH_SCAN。指定 与指定INDEX_SCAN,TABLE_SCAN,HASH_SCAN具有相同的效果 INDEX_SCAN,HASH_SCAN

    • 要强制对所有搜索进行哈希处理,请将此选项设置为 TABLE_SCAN,HASH_SCAN

    可以指定单个值,但这不是最优的,因为设置单个值会将搜索限制为仅使用该算法。特别是, INDEX_SCAN不建议单独设置,因为在这种情况下,如果没有索引,搜索根本无法找到行。

    笔记

    INDEX_SCAN只有当行 HASH_SCAN事件足够大时才 会有性能优势 。行事件的大小使用 --binlog-row-event-max-size. 例如,假设DELETE 删除 25,000 行的语句生成大型 Delete_row_event事件。在这种情况下,如果 slave_rows_search_algorithms 设置为INDEX_SCANHASH_SCAN有性能改进。但是,如果有 25,000 个 DELETE语句并且每个语句都由一个单独的事件表示,则设置 slave_rows_search_algorithmsINDEX_SCANHASH_SCAN在执行这些单独的事件时没有提供性能改进。

  • slave_skip_errors

    命令行格式 --slave-skip-errors=name
    系统变量 slave_skip_errors
    范围 全球的
    动态的
    类型 细绳
    默认值 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
    范围 全球的
    动态的 是的
    类型 布尔值
    默认值 ON

    使复制 SQL 线程使用从中继日志读取的校验和来验证数据。如果不匹配,副本会因错误而停止。

    笔记

    当通过网络接受事件时,复制 I/O 线程总是尽可能读取校验和。

  • slave_transaction_retries

    命令行格式 --slave-transaction-retries=#
    系统变量 slave_transaction_retries
    范围 全球的
    动态的 是的
    类型 整数
    默认值 10
    最小值 0
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295

    InnoDB如果复制 SQL 线程由于死锁或因为事务的执行时间超过 InnoDBs innodb_lock_wait_timeoutNDBs TransactionDeadlockDetectionTimeout 或 而无法执行事务,它会 在因错误而停止之前TransactionInactiveTimeout自动重试 times。slave_transaction_retries默认值为 10。

    使用多线程副本时无法重试事务。换句话说,只要 slave_parallel_workers大于 0,slave_transaction_retries 就被视为等于 0,并且不能更改。

  • slave_type_conversions

    命令行格式 --slave-type-conversions=set
    系统变量 slave_type_conversions
    范围 全球的
    动态的 是的
    类型
    默认值
    有效值 (≥ 5.6.13)

    ALL_LOSSY

    ALL_NON_LOSSY

    ALL_SIGNED

    ALL_UNSIGNED

    有效值(≤ 5.6.12)

    ALL_LOSSY

    ALL_NON_LOSSY

    使用基于行的复制时,控制对副本有效的类型转换模式。在 MySQL 5.6.13 及更高版本中,它的值是一个逗号分隔的零个或多个元素的集合,来自列表:ALL_LOSSY, ALL_NON_LOSSY, ALL_SIGNED, ALL_UNSIGNED。将此变量设置为空字符串以禁止源和副本之间的类型转换。更改需要重新启动副本才能生效。

    ALL_SIGNEDALL_UNSIGNED在 MySQL 5.6.13 中添加(错误#15831300)。有关适用于基于行的复制中的属性提升和降级的类型转换模式的其他信息,请参阅 基于行的复制:属性提升和降级

  • sql_slave_skip_counter

    系统变量 sql_slave_skip_counter
    范围 全球的
    动态的 是的
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295

    副本服务器应跳过的来自源的事件数。

    此选项与基于 GTID 的复制不兼容,并且在 gtid_mode=ON. 在 MySQL 5.6.10 及更高版本中,明确禁止尝试这样做。(缺陷 #15833516)如果您在使用 GTID 时需要跳过事务,请改用 gtid_executed源代码。有关如何执行此操作的信息, 请参阅 注入空事务。

    重要的

    如果跳过通过设置此变量指定的事件数会导致副本从事件组的中间开始,则副本将继续跳过,直到它找到下一个事件组的开头并从该点开始。有关详细信息,请参阅 第 13.4.2.4 节,“SET GLOBAL sql_slave_skip_counter 语句”

  • sync_master_info

    命令行格式 --sync-master-info=#
    系统变量 sync_master_info
    范围 全球的
    动态的 是的
    类型 整数
    默认值 10000
    最小值 0
    最大值 4294967295

    此变量对副本的影响取决于副本的 master_info_repository设置为FILETABLE,如以下段落中所述。

    master_info_repository = 文件。  如果 的值sync_master_info大于 0,则副本 在每个 事件后将其master.info文件同步到磁盘(使用 )。如果为0,则MySQL服务器不执行 文件到磁盘的同步;相反,服务器依靠操作系统定期刷新其内容,就像任何其他文件一样。 fdatasync()sync_master_infomaster.info

    master_info_repository = 表。  如果 的值sync_master_info大于 0,则副本在每个 sync_master_info事件后更新其连接元数据存储库表。如果为 0,则表永远不会更新。

  • sync_relay_log

    命令行格式 --sync-relay-log=#
    系统变量 sync_relay_log
    范围 全球的
    动态的 是的
    类型 整数
    默认值 10000
    最小值 0
    最大值 4294967295

    如果此变量的值大于 0,则 fdatasync()在每个 sync_relay_log事件写入中继日志后,MySQL 服务器将其中继日志同步到磁盘(使用)。

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

    值 1 是最安全的选择,因为在意外退出的情况下,您最多会从中继日志中丢失一个事件。然而,它也是最慢的选择(除非磁盘有电池备份缓存,这使得同步非常快)。

  • sync_relay_log_info

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

    的默认值为sync_relay_log_info 10000。

    此变量对副本的影响取决于服务器的 relay_log_info_repository 设置(FILETABLE)。如果设置为 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事件后更新。