首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主從複制實戰部署全記錄:異步、半同步、並行、部分複制、級聯與監控運維

     編輯:MySQL 綜合教學

環境準備

  • 主庫 IP:192.168.1.101 (server-id=1)
  • 從庫 IP:192.168.1.100 (server-id=2)
  • 雙向互信:雙方 grant all on *.* to root@'對方IP' identified by 'pwd' with grant option;

一、異步主從複制標準部署

1. 基礎數據同步(主→從)

# 主庫全量備份並記錄 Binlog 位置
mysqldump -uroot -p --socket=/tmp/mysqldata/node1/mysql.sock \
  --master-data=1 --all-databases > all_master.sql

# 從庫還原
mysql -uroot -p -h 192.168.1.100 < all_master.sql

備份檔中會包含 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=6125; 位置資訊。

2. 建立複制專用賬號(主庫)

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.100' IDENTIFIED BY 'repl';

3. 從庫配置複制並啟動

CHANGE MASTER TO
  MASTER_HOST='192.168.1.101',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=6125;
START SLAVE;
SHOW SLAVE STATUS\G
# 確認 Slave_IO_Running: Yes, Slave_SQL_Running: Yes

4. 驗證

# 主庫寫入
USE db1; INSERT INTO t1 VALUES(10);
# 從庫查詢
USE db1; SELECT * FROM t1;  -- 應可見新增行

二、半同步複制部署

1. 安裝插件

# 主庫
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
# 從庫
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

2. 啟用並配置超時

# 主庫
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000;  -- 1 秒超時,避免雪崩
# 從庫
SET GLOBAL rpl_semi_sync_slave_enabled=1;

3. 重啟複制驗證

STOP SLAVE; START SLAVE;
SHOW GLOBAL STATUS LIKE '%semi%';
# 應見 Rpl_semi_sync_master_yes_tx > 0

4. 測試阻塞行為

# 從庫 STOP SLAVE
# 主庫 INSERT → 會阻塞 1 秒後降級異步
# 從庫 START SLAVE → 恢復半同步

三、並行複制啟用

# 從庫
SET GLOBAL slave_parallel_workers=10;
STOP SLAVE; START SLAVE;
SHOW PROCESSLIST;  -- 可見 10 個 Worker 線程 + 1 協調線程

四、部分數據複制(從庫配置)

# /etc/my.cnf [mysqld] 區段新增
replicate_do_db=db2
# 重啟 MySQL 後驗證
SHOW SLAVE STATUS\G  # 顯示 Replicate_Do_DB: db2
# 測試:主庫 db1 刪除數據 → 從庫 db1 保留;主庫 db2 建表 → 從庫同步

五、級聯複制(A→B→C)

# 從庫 B 開啟 log_slave_updates
# 建立從庫 C 實例,以 B 為主庫配置複制
# 測試:主庫 A 建庫 → B、C 均同步到

六、監控與錯誤處理

SHOW SLAVE STATUS\G
# 關鍵檢查
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Last_SQL_Errno: 0
Last_IO_Errno: 0

錯誤處理

  • 1062/1032:優先人工修正數據一致性;或 SET GLOBAL sql_slave_skip_counter=1; START SLAVE;
  • 定期執行 pt-table-checksum 校驗主從一致性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved