萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 主從複寫錯誤:master and slave have equal MySQL server UUIDs 解決方案

錯誤現象

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.

用 rsync 整備複製 Data 目錄快速部署多套 MySQL,修改 my.cnf 後啟動,發現無法同步。

根因分析

  1. server_id 已在 my.cnf 逐台修改且互不相同,排除 ID 衝突。
  2. 深入檢查 Data 目錄,發現 auto.cnf 被一併複製:
[auto]
server-uuid=6dcee5be-8cdb-11e2-9408-90e2ba2e2ea6

auto.cnf 由 MySQL 首次啟動自動產生,記錄全域唯一 server_uuid。整目錄複製導致所有節點 UUID 相同,違反複寫要求。

解決步驟

  1. 停止 MySQL:systemctl stop mysqld
  2. 刪除或重命名 auto.cnf:mv data/auto.cnf data/auto.cnf.bak
  3. 啟動 MySQL:systemctl start mysqld(會自動產生新 UUID)
  4. 驗證:SHOW VARIABLES LIKE 'server_uuid'; 確認各節點唯一。
  5. 重啟複寫:START SLAVE;

快速產生合法 UUID(若需手動指定)

# Linux
uuidgen
# 或
cat /proc/sys/kernel/random/uuid

# 寫入 auto.cnf 格式
[auto]
server-uuid=生成的UUID

避坑指南

  • 「整目錄複製 Data」是極高風險操作,除非同時處理 auto.cnf、ib_logfile*、ibdata1 等實例級檔案。
  • 標準化部署流程:安裝 → 初始化 → 配置 → 啟動 → 建立複寫,勿捷徑複製 Data 目錄。
  • MySQL 8.0+ 可用 mysqld --initialize-insecure 快速初始化乾淨實例。

總結

server_uuid 衝突源於 auto.cnf 被誤複製。刪除該檔讓 MySQL 重新產生唯一 UUID 即可恢復複寫。牢記:server_id 由人為配置,server_uuid 由實例自動生成,兩者皆須全域唯一。

copyright © 萬盛學電腦網 all rights reserved