新增從庫後,主從雙雙出現大量 TIME_WAIT 連線,從庫錯誤日誌反覆報錯:
[Note] Slave: received end packet from server, apparent master shutdown:
[Note] Slave I/O thread: Failed reading log event, reconnecting to retry...
[Note] Slave I/O thread killed while reading event
檢查發現兩個從庫配置了相同的 server-id。MySQL 複製協議要求叢集內每個節點 server-id 必須全域唯一 (1~2^32-1)。重複導致:
TIME_WAIT 佔用埠資源# 1. 修改從庫 my.cnf
[mysqld]
server-id = 102 # 必須唯一,建議規劃:1=主, 101/102=從, 201/202=從的從
# 2. 重啟 MySQL 服務
systemctl restart mysqld
# 3. 重新建立複製 (如需)
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='...', MASTER_LOG_FILE='...', MASTER_LOG_POS=...;
START SLAVE;
| 角色 | server-id 範圍 | 命名建議 |
|---|---|---|
| 主庫 | 1-100 | 1, 2 (雙主) |
| 一級從庫 | 101-200 | 101, 102... |
| 二級從庫 (從的從) | 201-300 | 201, 202... |
| 備份/離線節點 | 9000+ | 9001, 9002... |
# 根據 IP 最後段自動生成唯一 server-id
LAST_OCTET=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | cut -d. -f4)
SERVER_ID=$((100 + LAST_OCTET)) # 從庫基礎 100
sed -i "s/^server-id.*/server-id = $SERVER_ID/" /etc/my.cnf
錯誤 apparent master shutdown 實為I/O 線程讀取 Binlog 時連線被主動斷開 (因 server-id 衝突主庫拒絕服務),而非主庫真正關機。MySQL 錯誤碼未覆蓋此邊緣場景,建議:
Slave_IO_Running + Slave_SQL_Running 雙重指標pt-heartbeat 或 orchestrator 實時檢測複製拓撲異常log_slave_updates=ON 確保鏈路完整性server-id 唯一且已規劃auto_increment_increment/offset 配合雙主/多主避免主鍵衝突REPLICATION SLAVE)rpl_semi_sync_master=ONgtid_mode=ON + enforce_gtid_consistency=ONSeconds_Behind_Master、Slave_*_Running、Last_IO_Error