最近在部署MySQL主從復制架構的時候,碰到了”Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.” 這個錯誤提示。即主從架構中使用了相同的UUID。檢查server_id系統變量,已經是不同的設置,那原因是?接下來為具體描述。
1、錯誤消息
mysql> show slave staus;
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;
these UUIDs must be different for replication to work.
2、查看主從的server_id變量
master_mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 33 |
+---------------+-------+
slave_mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 11 |
+---------------+-------+
-- 從上面的情形可知,主從mysql已經使用了不同的server_id
3、解決故障
###查看auto.cnf文件
[root@dbsrv1 ~] cat /data/mysqldata/auto.cnf ### 主上的uuid
[auto]
server-uuid=62ee10aa-b1f7-11e4-90ae-080027615026
[root@dbsrv2 ~]# more /data/mysqldata/auto.cnf ###從上的uuid,果然出現了重復,原因是克隆了虛擬機,只改server_id不行
[auto]
server-uuid=62ee10aa-b1f7-11e4-90ae-080027615026
[root@dbsrv2 ~]# mv /data/mysqldata/auto.cnf /data/mysqldata/auto.cnf.bk ###重命名該文件
[root@dbsrv2 ~]# service mysql restart ###重啟mysql
Shutting down MySQL.[ OK ]
Starting MySQL.[ OK ]
[root@dbsrv2 ~]# more /data/mysqldata/auto.cnf ###重啟後自動生成新的auto.cnf文件,即新的UUID
[auto]
server-uuid=6ac0fdae-b5d7-11e4-a9f3-0800278ce5c9
###再次查看slave的狀態已經正常
[root@dbsrv1 ~]# mysql -uroot -pxxx -e "show slave status\G"|grep Running
Warning: Using a password on the command line interface can be insecure.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
###主庫端查看自身的uuid
master_mysql> show variables like 'server_uuid';
+---------------+--------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------+
| server_uuid | 62ee10aa-b1f7-11e4-90ae-080027615026 |
+---------------+--------------------------------------+
1 row in set (0.00 sec)
###主庫端查看從庫的uuid
master_mysql> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID |
+-----------+------+------+-----------+--------------------------------------+
| 33 | | 3306 | 11 | 62ee10aa-b1f7-11e4-90ae-080027615030 |
| 22 | | 3306 | 11 | 6ac0fdae-b5d7-11e4-a9f3-0800278ce5c9 |
+-----------+------+------+-----------+--------------------------------------+
### Author : Leshami
下面是英文譯過來的
4,延生參考
一,有關SERVER_ID的描述
服務器的ID,REPLI使用
陽離子給每個主機和從機的唯一標識。這個變量被設置
由-server-id選項。對於每個服務器參與復制的,你應該選擇一個
在范圍從1到232- 1的正整數(2的32次方減1)作為該服務器的標識。
B,有關server_uuid的描述
從MySQL 5.6開始,服務器除了-server-ID生成一個真正的UUID
由用戶提供。這是可作為全球,只讀變量server_uuid(全局只讀變量)
啟動時,如下MySQL服務器會自動獲得一個UUID:
一個)。嘗試閱讀和使用寫在文件DATA_DIR / auto.cnf的UUID(其中DATA_DIR是
在服務器的數據目錄);出口上的成功。
b)中。否則,生成一個新的UUID並將其保存到這個文件,如果有必要創建文件。
該auto.cnf文件具有類似於用於的my.cnf或my.ini文件的文件的格式。在MySQL 5.6,
auto.cnf只有一個[汽車]包含一個server_uuid [1992]設置部分,
值;
重要
該auto.cnf文件是自動生成的;你不應該試圖寫
或修改此文件
還與MySQL 5.6開始,使用MySQL的復制,主人和奴隸的時候知道一
另一個是的UUID。一個奴隸的UUID的值可以在SHOW SLAVE HOSTS的輸出中可以看出。一旦
START SLAVE已經執行(而不是之前),大師的UUID的值可在
奴隸在SHOW SLAVE STATUS的輸出。
在MySQL 5.6.5或更高版本,服務器的server_uuid也在GTIDs用於發起交易
在該服務器上。欲了解更多信息,請參見16.1.3,“與全球事務復制