主從復制是 MySQL 高可用、讀寫分離、備份卸載的基石。本文系統闡述異步復制原理,並提供基於二進制日誌位點的手動搭建標準流程。
特點:**異步** (Master 不等待 Slave 確認)、**單向** (Master→Slave)、**最終一致性** (存在延遲)。
log_bin),設置唯一 server_id。-- 創建復制賬戶 GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'192.168.0.99' IDENTIFIED BY '123456'; FLUSH PRIVILEGES; -- 修改 my.cnf 並重啟 [mysqld] log-bin = mysql-bin server-id = 10 -- 獲取當前 Binlog 位點 (供 Slave 起始點) SHOW MASTER STATUS\G; -- 記錄 File (如 mysql-bin.000003) 與 Position (如 107) -- 備份數據 (一致性快照) FLUSH TABLES WITH READ LOCK; mysqldump -h127.0.0.1 -P3306 -uroot -p test > /home/ceshi/test.sql; UNLOCK TABLES;
-- 導入備份數據
mysql -uroot -p test < /home/ceshi/test.sql
-- 修改 my.cnf 並重啟
[mysqld]
server-id = 20
read-only = 1 -- 建議開啟防誤寫
-- 配置復制鏈接並啟動
CHANGE MASTER TO
MASTER_HOST='192.168.0.98',
MASTER_USER='slave001',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=107;
START SLAVE;
-- 驗證狀態
SHOW SLAVE STATUS\G;
-- 關鍵指標: Slave_IO_Running=Yes, Slave_SQL_Running=Yes
| 指標 | 正常值 | 異常含義 |
|---|---|---|
| Slave_IO_Running | Yes | No: 網絡不通/認證失敗/ Binlog 文件丟失 |
| Slave_SQL_Running | Yes | No: 數據不一致/衝突/結構差異/權限不足 |
| Seconds_Behind_Master | 0 或小值 | 大值: 延遲嚴重,需檢查 SQL 線程性能/網絡/大事務 |
| Last_IO_Error / Last_SQL_Error | 空 | 具體錯誤信息 |
FLUSH TABLES WITH READ LOCK 會話斷開即失效,備份期間**勿關閉該會話**。GTID 模式 (MASTER_AUTO_POSITION=1),無需手動指定位點,故障切換更簡單。read-only=1 僅限制非 SUPER 權限用戶寫入,管理員仍可寫入,防誤操作需收回權限。ROW 或 MIXED,避免 STATEMENT 下非確定性函數導致主從不一致。