首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Replication 實戰避坑指南:從配置到故障排查的完整複盤

     編輯:MySQL 資料庫相關知識

踩坑 1:Binlog 檔案位置未指定,重啟後找不到

配置 log_bin = mysql-bin 未給絕對路徑,檔案生成在 datadir(如 /var/lib/mysql/)。重啟後產生新檔 mysql-bin.000002,舊檔索引在 mysql-bin.index。建議:明確指定 log_bin = /var/log/mysql/mysql-bin.log。

踩坑 2:Master 重啟導致 Binlog 位點變化

SHOW MASTER STATUS;
-- 第一次:mysql-bin.000001, Pos 106
-- 重啟後:mysql-bin.000002, Pos 106

配置 Slave 時務必以 當前最新 的 File/Position 為準,不可用舊記錄。

踩坑 3:Windows Slave 不知道用哪個配置檔

Windows 安裝產生多個 my.ini,以 mysql --help | findstr my.ini 確認實際讀取順序,修改正確檔案並重啟服務(mysqladmin shutdown / net start mysql)。

踩坑 4:Slave IO Thread 起不來,報錯 ERROR 2003

CHANGE MASTER TO ...; START SLAVE;
-- SHOW SLAVE STATUS\G 顯示 Slave_IO_Running: No
-- 錯誤日誌:ERROR 2003 (HY000): Can't connect to MySQL server on 'master_ip' (111)

原因:Master 的 bind-address = 127.0.0.1 封鎖遠程連線。解決:Master 註釋該行並重啟。

踩坑 5:Slave 缺少表導致 SQL Thread 報錯

Last_Error: Error 'Table test.chen doesn't exist' on query. 
Default database: 'test'. Query: 'insert into chen values(...)'

解決:Master SHOW CREATE TABLE chen → Slave 執行建表 → START SLAVE 自動追上。

驗證同步成功

-- Master
INSERT INTO chen VALUES (1111,'chen','chen');

-- Slave
SELECT * FROM chen;
-- 顯示新行,Seconds_Behind_Master = 0

核心檢查清單

  • Master:server-id、log_bin(絕對路徑)、bind-address 註釋、建立 REPLICATION SLAVE 帳號。
  • Slave:server-id 不同、relay_log 指定、CHANGE MASTER TO 位點對齊。
  • 初始同步:FLUSH TABLES WITH READ LOCK → mysqldump → 導入 → UNLOCK TABLES。
  • 監控:Slave_IO_Running=Yes、Slave_SQL_Running=Yes、Seconds_Behind_Master=0、Last_Error 為空。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved