以下部分包含有关 用于复制和控制二进制日志的mysqld选项和服务器变量的信息。用于复制源服务器和副本的选项和变量单独介绍,与二进制日志相关的选项和变量也是如此。还包括一组提供有关这些选项和变量的基本信息的快速参考表。
特别重要的是
server_id系统变量。
| 命令行格式 | --server-id=# |
|---|---|
| 系统变量 | server_id |
| 范围 | 全球的 |
| 动态的 | 是的 |
| 类型 | 整数 |
| 默认值 | 0 |
| 最小值 | 0 |
| 最大值 | 4294967295 |
此变量指定服务器 ID。
在复制源服务器和每个副本上,您
必须指定
server_id建立一个唯一的复制 ID,范围从 1 到 2 32
− 1。“唯一”,意味着每个 ID 必须与任何其他复制使用的每个其他 ID 不同源服务器或副本。有关其他信息,请参阅
第 17.1.4.2 节,“复制源选项和变量”和
第 17.1.4.3 节,“副本服务器选项和变量”。
如果不指定server_id,则默认服务器 ID 为 0。如果服务器 ID 设置为 0,则会进行二进制日志记录,但服务器 ID 为 0 的源拒绝来自副本的任何连接,而服务器 ID 为0 拒绝连接到源。请注意,虽然您可以将服务器 ID 动态更改为非零值,但这样做并不能使复制立即开始。您必须更改服务器 ID,然后重新启动服务器以初始化副本。
在 MySQL 5.6 中,无论服务器 ID 是否显式设置为 0 或允许使用默认值,服务器都会将
server_id系统变量设置为 1;这是一个已知问题,已在 MySQL 5.7 中修复。
有关详细信息,请参阅 第 17.1.1.2 节,“设置副本配置”。
从 MySQL 5.6 开始,除了server_id用户提供的值之外,服务器还会生成一个真实的 UUID。这可用作全局只读
server_uuid系统变量。
| 系统变量 | server_uuid |
|---|---|
| 范围 | 全球的 |
| 动态的 | 不 |
| 类型 | 细绳 |
MySQL服务器在启动时会自动获取一个UUID,如下:
该auto.cnf文件的格式类似于用于my.cnf或my.ini
文件的格式。在 MySQL 5.6 中,auto.cnf只有一个[auto]部分包含一个
server_uuid设置和值;该文件的内容类似于此处显示的内容:
[auto]
server_uuid=8a94f357-aab4-11df-86ab-c80aa9429562
auto.cnf文件自动生成
;不要尝试写入或修改此文件。
同样从 MySQL 5.6 开始,当使用 MySQL 复制时,源和副本知道彼此的 UUID。副本的 UUID 的值可以在 的输出中看到
SHOW SLAVE HOSTS。执行
START SLAVE后(但不是之前),源的 UUID 的值在 的输出中的副本上可用SHOW SLAVE
STATUS。
发出STOP SLAVEor
RESET SLAVE语句不会
重置副本上使用的源 UUID。
服务器的server_uuid也在 GTID 中用于源自该服务器的事务。有关详细信息,请参阅第 17.1.3 节,“使用全局事务标识符进行复制”。
启动时,复制 I/O 线程会生成错误并中止,如果其源的 UUID 等于它自己的 UUID,除非
--replicate-same-server-id已设置该选项。此外,如果以下任一情况为真,复制 I/O 线程会生成警告:
不存在具有预期的来源
server_uuid。来源
server_uuid已更改,但CHANGE MASTER TO从未执行过任何语句。
在 MySQL 5.6 中添加server_uuid
系统变量不会改变
server_id为每个 MySQL 服务器设置唯一值的要求,作为准备和运行 MySQL 复制的一部分,如本节前面所述。