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

MySQL 主從復制手把手教程:從配置文件到驗證同步的標準化部署流程

     編輯:MySQL 綜合教學

MySQL 主從復制手把手教程:從配置文件到驗證同步的標準化部署流程

主從復制是 MySQL 高可用、讀寫分離、備份分流的基石。本文以 Ubuntu 環境為例,提供從安裝、配置、建立同步賬號、導出快照、啟動同步、狀態驗證的標準化全流程,適用于 MySQL 5.6/5.7/8.0(GTID 模式另文說明)。

環境規劃

角色IPServer ID備註
Master192.168.0.751寫入節點
Slave192.168.0.762讀取/備份節點

Master 端配置與操作

  1. 修改 /etc/mysql/my.cnf:
    [mysqld]
    bind-address = 192.168.0.75      # 綁定內網 IP,或 0.0.0.0
    server-id = 1                    # 全局唯一
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = zm_gaiay_net_cn   # 指定同步庫(可多行,或用 replicate-do-db 在從庫過濾)
    binlog_format = ROW              # 推薦 ROW 格式,數據一致性最強
    expire_logs_days = 7             # 自動清理舊 binlog
    max_binlog_size = 100M
  2. 重啟服務:systemctl restart mysql
  3. 創建同步賬號:
    CREATE USER 'repl_user'@'192.168.0.%' IDENTIFIED BY 'ReplPass#2024';
    GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.0.%';
    FLUSH PRIVILEGES;
  4. 鎖表導出一致性快照:
    mysql -u root -p
    USE zm_gaiay_net_cn;
    FLUSH TABLES WITH READ LOCK;  -- 阻塞寫入
    SHOW MASTER STATUS;           -- 記錄 File、Position
    -- 另開終端導出
    mysqldump -u root -p --single-transaction --master-data=2 --databases zm_gaiay_net_cn > master_snapshot.sql
    -- 回主庫解鎖
    UNLOCK TABLES;

Slave 端配置與操作

  1. 修改 /etc/mysql/my.cnf:
    [mysqld]
    server-id = 2
    relay-log = /var/log/mysql/mysql-relay-bin.log
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = zm_gaiay_net_cn
    read_only = 1                  # 防止誤寫入
    skip_slave_start = 1           # 防止啟動自動同步,便于手動控制
  2. 重啟服務:systemctl restart mysql
  3. 導入主庫快照:
    mysql -u root -p < master_snapshot.sql
  4. 配置同步連接並啟動:
    CHANGE MASTER TO
      MASTER_HOST='192.168.0.75',
      MASTER_USER='repl_user',
      MASTER_PASSWORD='ReplPass#2024',
      MASTER_LOG_FILE='mysql-bin.000001',  -- 來自 Master SHOW MASTER STATUS
      MASTER_LOG_POS=107;
    
    START SLAVE;
  5. 驗證同步狀態:
    SHOW SLAVE STATUS\G
    -- 關鍵指標:
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Seconds_Behind_Master: 0
    Last_IO_Error: (空)
    Last_SQL_Error: (空)

常見同步延遲/報錯排查

現象可能原因處理
IO_Running: No網絡不通/賬號密碼錯/MASTER_LOG_POS 錯誤檢查防火牆、ping、重新 CHANGE MASTER TO
SQL_Running: No從庫執行報錯(鍵衝突/表結構差異/外鍵失敗)查 Last_SQL_Error,手動修復或跳過:STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
Seconds_Behind_Master 大從庫硬件弱/大事務/長查詢阻塞/單線程 SQL 執行升級硬件、啟用多線程復制 (slave_parallel_workers>0)、優化慢查詢
Relay log 損壞磁盤故障/殺進程導致寫入中斷RESET SLAVE ALL; 重新 CHANGE MASTER TO 從新位點開始

生產級加固建議

  • ✅ 啟用 GTID 模式(MySQL 5.6+):gtid_mode=ON, enforce_gtid_consistency=ON,故障切換自動定位位點。
  • ✅ 半同步復制:rpl_semi_sync_master=ON, rpl_semi_sync_slave=ON,承諾至少一從庫收到事務才提交。
  • ✅ 監控告警:Prometheus 抓取 mysql_slave_io_running、mysql_slave_sql_running、mysql_seconds_behind_master。
  • ✅ 定期校驗:pt-table-checksum 檢測主從數據一致性。
  • ✅ 備份在從庫:xtrabackup --slave-info 記錄同步位點,恢復無需重新搭建。

標準化部署、持續監控、定期校驗,主從復制才能成為可信賴的基礎設施。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved