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
......
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原创文章,转载无需和我联系,但请注明来自larwas博客 https://larwas.com
最新评论