以下部分包含有关 mysqld 选项和服务器变量的信息,这些选项和变量用于复制和控制二进制日志。源和副本上的选项和变量分别介绍,二进制日志记录和全局事务标识符 (GTID) 相关的选项和变量也是如此。还包含一组快速参考表,提供有关这些选项和变量的基本信息。
特别重要的是 server_id
系统变量。
此变量指定服务器 ID。 server_id
默认设置为 1。服务器可以使用此默认 ID 启动,但如果启用了二进制日志记录,则如果您没有明确设置 server_id
来指定服务器 ID,则会发出一条信息性消息。
对于用在复制拓扑中的服务器,您必须为每个复制服务器指定一个唯一的服务器 ID,范围从 1 到 232 − 1。 “唯一” 表示每个 ID 必须与复制拓扑中任何其他源或副本使用的任何其他 ID 不同。有关更多信息,请参见 第 19.1.6.2 节,“复制源选项及变量” 和 第 19.1.6.3 节,“副本服务器选项及变量”。
如果服务器 ID 设置为 0,则会进行二进制日志记录,但服务器 ID 为 0 的源会拒绝来自副本的任何连接,而服务器 ID 为 0 的副本会拒绝连接到源。请注意,虽然您可以动态地将服务器 ID 更改为非零值,但这不会立即启用复制。您必须更改服务器 ID,然后重新启动服务器以初始化副本。
有关更多信息,请参见 第 19.1.2.2 节,“设置副本配置”。
MySQL 服务器除了在 server_id
系统变量中设置的默认或用户提供的服务器 ID 之外,还会生成一个真正的 UUID。这可作为全局只读变量 server_uuid
获得。
即使存在 server_uuid
系统变量,仍然需要为每个 MySQL 服务器设置唯一的 server_id
值,这是准备和运行 MySQL 复制的必要步骤,如本节前面所述。
系统变量 | server_uuid |
---|---|
范围 | 全局 |
动态 | 否 |
SET_VAR 提示适用 |
否 |
类型 | 字符串 |
启动时,MySQL 服务器会自动获取 UUID,方法如下
auto.cnf
文件的格式类似于用于 my.cnf
或 my.ini
文件的格式。 auto.cnf
只有一个 [auto]
节,其中包含单个 server_uuid
设置和值;文件内容与以下内容类似
[auto]
server_uuid=8a94f357-aab4-11df-86ab-c80aa9429562
auto.cnf
文件是自动生成的;请勿尝试写入或修改此文件。
使用 MySQL 复制时,源服务器和副本服务器相互知道对方的 UUID。副本服务器的 UUID 值可以在 SHOW REPLICAS
的输出中看到。执行 START REPLICA
后,源服务器的 UUID 值在副本服务器上 SHOW REPLICA STATUS
的输出中可用。
发出 STOP REPLICA
或 RESET REPLICA
语句 不会 重置副本服务器上使用的源服务器的 UUID。
服务器的 server_uuid
也用于该服务器上发起的交易的 GTID。有关更多信息,请参见 第 19.1.3 节,“使用全局事务 ID 进行复制”。
启动时,如果复制 I/O(接收器)线程的源服务器 UUID 与自身相同,则会生成错误并中止,除非已设置 --replicate-same-server-id
选项。此外,如果以下任一情况为真,则复制接收器线程会生成警告
不存在具有预期
server_uuid
的源服务器。源服务器的
server_uuid
已更改,但从未执行过CHANGE REPLICATION SOURCE TO
语句。