16.1.6 复制和二进制日志记录选项和变量

以下各节包含有关mysqld选项和服务器变量的信息,这些选项用于复制并用于控制二进制日志。分别介绍了用于源和副本的选项和变量,以及与二进制日志记录和全局事务标识符(GTID)有关的选项和变量。还包括一组快速参考 table,这些 table 提供了有关这些选项和变量的基本信息。

特别重要的是server_id系统变量。

PropertyValue
Command-Line Format--server-id=#
System Variableserver_id
ScopeGlobal
DynamicYes
TypeInteger
Default Value0
Minimum Value0
Maximum Value4294967295

此变量指定服务器 ID。在 MySQL 5.7 中,如果启用了二进制日志记录,则必须指定server_id,否则不允许启动服务器。

server_id默认设置为 0.在复制源服务器和每个副本上,必须指定server_id以构建范围从 1 到 232-1 的唯一复制 ID。“唯一”table 示每个 ID 都必须与任何其他正在使用的其他 ID 不同复制拓扑中的其他源或副本。有关更多信息,请参见第 16.1.6.2 节,“复制源选项和变量”第 16.1.6.3 节“ Replica 服务器选项和变量”

如果服务器 ID 设置为 0,则会进行二进制日志记录,但是服务器 ID 为 0 的源将拒绝来自副本的任何连接,服务器 ID 为 0 的副本将拒绝与源的连接。请注意,尽管您可以将服务器 ID 动态更改为非零值,但这样做不会使复制立即开始。您必须更改服务器 ID,然后重新启动服务器以初始化副本。

有关更多信息,请参见第 16.1.2.5.1 节,“设置副本配置”

server_uuid

在 MySQL 5.7 中,除了由用户提供的server_id值之外,服务器还会生成真实的 UUID。可用作全局只读server_uuid系统变量。

Note

如本节前面所述,MySQL 5.7 中存在server_uuid系统变量不会改变为准备和运行 MySQL 复制而为每个 MySQL 服务器设置唯一server_id值的要求。

PropertyValue
System Variableserver_uuid
ScopeGlobal
DynamicNo
TypeString

启动时,MySQL 服务器会自动获取 UUID,如下所示:

  • 尝试读取和使用写在文件data_dir/auto.cnf(其中* data_dir *是服务器的数据目录)中的 UUID。

  • 如果未找到data_dir/auto.cnf,则生成一个新的 UUID 并将其保存到该文件,并在必要时创建该文件。

auto.cnf文件的格式类似于my.cnfmy.ini文件所使用的格式。在 MySQL 5.7 中,auto.cnf仅具有一个[auto]节,其中包含一个server_uuid设置和值。该文件的内容类似于此处显示的内容:

[auto]
server_uuid=8a94f357-aab4-11df-86ab-c80aa9429562

Important

auto.cnf文件是自动生成的;不要尝试写入或修改此文件。

使用 MySQL 复制时,源和副本彼此知道彼此的 UUID。副本的 UUID 的值可以在显示从主机的输出中看到。一旦执行START SLAVE,源的 UUID 的值就可以在显示从站状态的输出中的副本上使用。

Note

发出STOP SLAVERESET SLAVE语句不会不会重置副本上使用的源 UUID。

GTID 中也使用服务器的server_uuid来进行源自该服务器的事务。有关更多信息,请参见第 16.1.3 节“使用全局事务标识符进行复制”

启动时,除非设置了--replicate-same-server-id选项,否则复制 I/O 线程将生成错误并中止其源 UUID。此外,如果满足以下任一条件,则复制 I/O 线程会生成警告: