萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 主從複寫部署全流程筆記:從原理到配置、備份、驗證、在線擴展從庫

複寫原理:三線程協作

  • Master Binlog Dump Thread:主庫推送 Binlog 事件。
  • Slave IO Thread:從庫連主庫、請求 Binlog、寫入 Relay Log。
  • Slave SQL Thread:從庫讀 Relay Log、解析執行、更新 relay-log.info。

部署步驟(標準流程)

1. 主庫配置

[mysqld]
log-bin = mysql-bin
binlog_format = mixed
binlog_cache_size = 4M
max_binlog_size = 300M
expire_logs_days = 3
server-id = 1
systemctl restart mysqld

2. 建立複寫帳號

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl_pass';
FLUSH PRIVILEGES;

3. 主庫全量備份(一致性快照)

# 終端 1:鎖表
mysql> FLUSH TABLES WITH READ LOCK;
mysql> RESET MASTER;  -- 可選,重置 binlog 從 000001 開始

# 終端 2:備份(不退出終端 1,保持鎖)
mysqldump -uroot -h127.0.0.1 --single-transaction --master-data=2 -R db_name > /backup/db_name.sql

# 終端 1:解鎖
mysql> UNLOCK TABLES;
mysql> SHOW MASTER STATUS\G;  -- 記錄 File、Position

4. 從庫配置

[mysqld]
server-id = 2
read_only = 1
binlog_format = mixed
binlog_cache_size = 4M
max_binlog_size = 300M
relay_log = mysql-relay-bin
log_slave_updates = 0  # 非級聯複寫建議關閉
systemctl restart mysqld

5. 從庫導入全量資料

mysql> CREATE DATABASE db_name;
mysql> USE db_name;
mysql> SET NAMES utf8mb4;
mysql> SOURCE /backup/db_name.sql;

6. 建立複寫連線並啟動

CHANGE MASTER TO
    MASTER_HOST='192.168.1.100',
    MASTER_USER='repl',
    MASTER_PASSWORD='repl_pass',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=107;

START SLAVE;

7. 驗證

SHOW SLAVE STATUS\G;
-- 關鍵:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Seconds_Behind_Master: 0

在線新增從庫(零停機主庫)

  1. 現有從庫(Slave-A)正常運行。
  2. 對 Slave-A 執行全量備份(同步點已知)。
  3. 將備份導入新從庫(Slave-B)。
  4. Slave-B 執行 CHANGE MASTER TO ... MASTER_LOG_FILE=..., MASTER_LOG_POS=... 指向相同位點。
  5. START SLAVE; 即可追上主庫,主庫完全無感知。

常見坑點提醒

  • server-id 全集群**唯一**,衝突會導致 IO 線程啟動失敗。
  • binlog_format 主從**必須一致**(建議 ROW 或 MIXED)。
  • skip-name-resolve 開啟時,授權用 IP 而非主機名。
  • 防火牆放行 3306,雙向通訊(主庫也需連從庫做半同步/心跳時)。
  • 定期 SHOW SLAVE STATUS\G 監控,納入告警體系。
copyright © 萬盛學電腦網 all rights reserved