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

Linux 下 MySQL 主從備份搭建全流程實戰(基於 GTID 的現代化配置補充)

     編輯:MySQL 綜合教學

架構規劃

角色IP版本Server ID
Master192.168.1.100MySQL 5.7+1
Slave192.168.1.101MySQL 5.7+2

原則:從庫版本 ≥ 主庫版本;同一局域網、低延遲。


一、Master 配置

1. 編輯 my.cnf

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW          # 推薦 ROW,避免 UUID() 等不安全函數問題
gtid-mode=ON               # 5.6+ 開啟 GTID
enforce-gtid-consistency=ON
sync-binlog=1              # 高可用關鍵
binlog-do-db=business_db   # 僅同步業務庫
binlog-ignore-db=mysql,sys,performance_schema,information_schema

2. 建立複制賬號

CREATE USER 'repl_user'@'192.168.1.%' IDENTIFIED BY 'ReplPass@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.1.%';
FLUSH PRIVILEGES;

3. 重啟並備份基線數據

systemctl restart mysqld
mysqldump --single-transaction --master-data=2 --databases business_db > /backup/master_base_$(date +%F).sql

--master-data=2 會在輸出中以註釋形式包含 CHANGE MASTER TO 所需的 MASTER_LOG_FILE 與 MASTER_LOG_POS(或 GTID)。

4. 記錄當前 Binlog 位置(非 GTID 時需用)

SHOW MASTER STATUS;
-- 記下 File 與 Position

二、Slave 配置

1. 編輯 my.cnf

[mysqld]
server-id=2
relay-log=relay-bin
log-slave-updates=ON       # 鏈式複制時必需
read-only=ON               # 防誤寫
gtid-mode=ON
enforce-gtid-consistency=ON

2. 導入基線數據

mysql -uroot -p < /backup/master_base_2024-05-20.sql

3. 配置複制連線(GTID 模式)

STOP SLAVE;
CHANGE MASTER TO
  MASTER_HOST='192.168.1.100',
  MASTER_PORT=3306,
  MASTER_USER='repl_user',
  MASTER_PASSWORD='ReplPass@123',
  MASTER_AUTO_POSITION=1;   # GTID 核心參數,無需手動指定 File/Position
START SLAVE;

非 GTID 降級寫法:

CHANGE MASTER TO
  MASTER_HOST='192.168.1.100',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='ReplPass@123',
  MASTER_LOG_FILE='mysql-bin.000003',
  MASTER_LOG_POS=154;

三、驗證與監控

SHOW SLAVE STATUS\G
-- 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Last_IO_Error: 
Last_SQL_Error:
Retrieved_Gtid_Set: xxxx
Executed_Gtid_Set: xxxx

四、常見故障排查

  1. IO 執行緒掛起:檢查防火牆 3306、賬號主機匹配、Master bind-address。
  2. SQL 執行緒報錯:SHOW SLAVE STATUS\G 看 Last_SQL_Error,常見於主鍵衝突、字符集不一致、表結構差異。
  3. GTID 斷點:SET GLOBAL gtid_purged='...' 謹慎操作,或重新從 Master 重做基線。
  4. 延遲過大:檢查從庫硬碟 IOPS、slave_parallel_workers(5.7+ 開啟並行複制)、網絡帶寬。

五、生產環境加固清單

  • 啟用 binlog_checksum=CRC32、master_verify_checksum=ON、slave_sql_verify_checksum=ON。
  • 配置 replicate-ignore-db 過濾系統庫。
  • 部署監控:Prometheus + mysqld_exporter 采集 Seconds_Behind_Master、Slave_IO_Running 告警。
  • 定期演練:模擬 Master 掛掉、提升 Slave 為新 Master、重建舊 Master 為 Slave。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved