16.1.6 复制和二进制日志记录选项和变量
以下各节包含有关mysqld选项和服务器变量的信息,这些选项用于复制并用于控制二进制日志。分别介绍了用于源和副本的选项和变量,以及与二进制日志记录和全局事务标识符(GTID)有关的选项和变量。还包括一组快速参考 table,这些 table 提供了有关这些选项和变量的基本信息。
特别重要的是server_id系统变量。
Property | Value |
---|---|
Command-Line Format | --server-id=# |
System Variable | server_id |
Scope | Global |
Dynamic | Yes |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 4294967295 |
此变量指定服务器 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 节,“设置副本配置”。
在 MySQL 5.7 中,除了由用户提供的server_id值之外,服务器还会生成真实的 UUID。可用作全局只读server_uuid系统变量。
Note
如本节前面所述,MySQL 5.7 中存在server_uuid系统变量不会改变为准备和运行 MySQL 复制而为每个 MySQL 服务器设置唯一server_id值的要求。
Property | Value |
---|---|
System Variable | server_uuid |
Scope | Global |
Dynamic | No |
Type | String |
启动时,MySQL 服务器会自动获取 UUID,如下所示:
-
尝试读取和使用写在文件
data_dir/auto.cnf
(其中*data_dir
*是服务器的数据目录)中的 UUID。 -
如果未找到
data_dir/auto.cnf
,则生成一个新的 UUID 并将其保存到该文件,并在必要时创建该文件。
auto.cnf
文件的格式类似于my.cnf
或my.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 SLAVE或RESET SLAVE语句不会不会重置副本上使用的源 UUID。
GTID 中也使用服务器的server_uuid
来进行源自该服务器的事务。有关更多信息,请参见第 16.1.3 节“使用全局事务标识符进行复制”。
启动时,除非设置了--replicate-same-server-id选项,否则复制 I/O 线程将生成错误并中止其源 UUID。此外,如果满足以下任一条件,则复制 I/O 线程会生成警告:
-
不存在预期的server_uuid的源。
-
源的server_uuid已更改,尽管从未执行过更改为主语句。