隨著業務量增長,單一 MySQL 實例往往難以應對高並發讀寫壓力。主從架構作為 MySQL 原生高可用與讀寫分離方案,憑藉成熟的復制機制,成為中小型系統擴展的首選。本文將系統梳理主從架構原理、優缺點,並提供生產級配置步驟與驗證方法。
MySQL 主從架構包含一個主庫與一個或多個從庫。主庫負責處理所有寫入請求並開啟二進制日誌,從庫通過 I/O 線程拉取主庫 Binlog,再由 SQL 線程重放實現數據同步。為防止數據分歧,從庫通常設置 read_only=ON 僅提供查詢服務。
mysqldump 或物理備份,避免主庫鎖表影響業務MySQL 預設採用異步復制,主從間存在毫秒到秒級延遲。對強一致性要求極高的業務(如扣款、庫存),仍需路由至主庫讀取,或升級為半同步/Group Replication 架構。
| 角色 | IP | Server ID | 備註 |
|---|---|---|---|
| Master | 192.168.1.100 | 1 | 讀寫節點 |
| Slave | 192.168.1.101 | 2 | 唯讀節點,可多台 |
確保兩節點:
① 系統版本、MySQL 版本一致
② 關閉防火牆或放行 3306 端口
③ 關閉 SELinux
④ 時間同步(NTP)
/etc/my.cnf[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
binlog-do-db=orders # 僅同步業務庫
binlog-ignore-db=mysql # 忽略系統庫
sync_binlog=1 # 高可靠,防丟事務
innodb_flush_log_at_trx_commit=1
gtid_mode=ON # 推薦啟用 GTID
enforce-gtid-consistency=ON
修改後執行 systemctl restart mysqld 生效。
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'StrongPass#2024';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;
-- 主庫執行
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
-- 記下 File 與 Position,如:mysql-bin.000001, 154
UNLOCK TABLES;
推薦使用 mysqldump --single-transaction --master-data=2 --all-databases 邏輯備份,或 Percona XtraBackup 物理備份(大數據量首選)。將備份文件傳至從庫並導入:
scp backup.sql root@192.168.1.101:/tmp/
mysql -uroot -p < /tmp/backup.sql
/etc/my.cnf[mysqld]
server-id=2
relay-log=relay-bin
read_only=ON
replicate-do-db=orders
replicate-ignore-db=mysql,test,information_schema,performance_schema
gtid_mode=ON
enforce-gtid-consistency=ON
重啟後配置同步源:
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='StrongPass#2024',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154,
MASTER_AUTO_POSITION=1; -- 若啟用 GTID
START SLAVE;
SHOW SLAVE STATUS\G
-- 關鍵指標均為 Yes 即正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
ROW,避免 Statement 模式下非確定性函數導致不一致Seconds_Behind_Master,設置告警閾值主從架構雖非強一致,但以極低成本解決了讀擴展、備份隔離、基礎高可用三大痛點。掌握上述標準化部署流程,配合監控與自動化運維工具,即可支撐千萬級日活業務。後續可演進至 MGR、InnoDB Cluster 獲得金融級強一致能力。