MySQL 的 auto.cnf 文件

AUTO.CNF 文件

MySQL 5.6 以上版本数据目录中,存储了 server_uuid 值的一个文件:

[auto]
server-uuid=60441692-b40f-11e7-80d1-00163e0e52af

在 MYSQL 启动时,会自动从 auto.cnf 文件中获取 server_uuid 值,并将其存储在全局变量 server_uuid 中。server_uuid 与 server_id 一样,用于标识MySQL实例在集群中的唯一性,这两个参数在主从复制中具有重要作用,如果主从库中的server_uuid 或者 server_id 的值一样,将会导致主从复制报错中断。 主库中执行命令show slave hosts能够看到主、从库的 server-id 和 server-uuid;

mysql> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID                           |
+-----------+------+------+-----------+--------------------------------------+
| 39 |      | 3306 | 170238776 | 5a0280d4-6404-11e8-840e-fa163eab3dcf |
| 40 |      | 3306 | 170238776 | 4db07c8a-6f01-11e8-bef6-fa163e767b9a |
+-----------+------+------+-----------+--------------------------------------+
2 rows in set (0.00 sec)

在从库执行show slave status\G,可以看到主库的server-id 和 server-uuid

                           ......
             Master_Server_Id: 170238776
                  Master_UUID: f2d0efd6-6ab7-11e8-8fdd-fa163eda7360
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State:
           Master_Retry_Count: 86400
                           ......

主从库 server-uuid 或 server-id 值一样,导致主从复制异常中断

MySQL 初始化时,会在 auto.cnf 文件读取 server-uuid 参数,若没有此文件或读取不到,则会调用函数 generate_server_uuid 生成一个新的uuid,并通过 flush_auto_options 函数将 uuid 写入 auto.cnf 文件。 默认情况,从库发现两者的 server-uuid 或 server-id 一样时,其 I/O 线程会直接退出报错。 参数 --replicate-same-server-id设置为 1 时,即使主从库 uuid 一样,也能正常复制,但会产生意想不到的后果。

Larwas
请先登录后发表评论
  • latest comments
  • 总共0条评论