首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 5.5 主從複製配置完整教程:CentOS 環境下一主一從搭建與故障處理

     編輯:MySQL 資料庫相關知識

MySQL 主從複製是讀寫分離、災備、數據分發的基礎架構。本文基於 CentOS 5.6 + MySQL 5.5.8 環境,詳細記錄一主一從搭建全流程、關鍵參數解析、同步異常處理方案。

環境規劃

角色OSMySQLIPServer ID
MasterCentOS 5.65.5.8192.168.1.21
SlaveCentOS 5.65.5.8192.168.1.32

Master 配置(/etc/my.cnf)

[mysqld]
server-id=1
log-bin=/var/lib/mysql/mysql-bin
datadir=/var/lib/mysql

# InnoDB 事務安全關鍵參數
innodb_flush_log_at_trx_commit=1
sync_binlog=1

參數解析:

  • log-bin:啟用二進制日誌,複製的核心
  • sync_binlog=1:每次提交同步刷盤,防主庫崩潰丟事務
  • innodb_flush_log_at_trx_commit=1:事務提交強制刷 redo log,配合上項保證「不丟數據」

Master 創建複製賬號並記錄 Binlog 位點

-- 創建專用複製用戶(限定 Slave IP)
CREATE USER 'repl_user'@'192.168.1.3' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.1.3';

-- 鎖表防寫入,記錄位點
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
-- 記錄輸出:File: mysql-bin.000013, Position: 7863951

同步初始數據到 Slave

# Master 端導出並管道導入 Slave(單庫 test 為例)
/usr/bin/mysqldump test -uroot -padmin --opt | mysql test -uroot -padmin -h 192.168.1.3

解鎖 Master 恢復寫入

UNLOCK TABLES;

Slave 配置(/etc/my.cnf)

[mysqld]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
replicate-do-db=test
datadir=/var/lib/mysql

關鍵參數:

  • relay-log:獨立中繼日誌文件,避免默認名稱衝突
  • replicate-do-db=test:只同步 test 庫(可配置多行或用通配符)

Slave 初始化並啟動複製

STOP SLAVE;

CHANGE MASTER TO
  MASTER_HOST='192.168.1.2',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000013',
  MASTER_LOG_POS=7863951;

START SLAVE;

驗證複製狀態

SHOW SLAVE STATUS\G

關鍵指標:

  • Slave_IO_Running: Yes — IO 線程連接 Master 正常
  • Slave_SQL_Running: Yes — SQL 線程執行中繼日誌正常
  • Seconds_Behind_Master: 0 — 無延遲

測試複製生效

-- Master 執行
USE test; CREATE TABLE t_repl_test (id INT); INSERT INTO t_repl_test VALUES (1);

-- Slave 查看
USE test; SELECT * FROM t_repl_test; -- 應返回 1 行

常見故障與處理

1. Slave SQL 執行報錯導致同步卡住

現象:Slave_SQL_Running: No,Last_SQL_Error 顯示具體錯誤。

方案:跳過錯誤事務(謹慎使用,確認數據可接受不一致):

STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;

更佳做法:分析錯誤原因 → Master 修正數據 → Slave 手動執行補償 → 恢復同步。

2. Binlog 文件丟失/位點不匹配

現象:Got fatal error 1236: Could not find first log file name in binary log index file

方案:重新同步(見下文「主從不同步修復」)。

3. 主從數據不一致排查

# 推薦工具:pt-table-checksum (Percona Toolkit)
pt-table-checksum --databases=test --recursion-method=hosts \
  h=192.168.1.2,u=root,p=admin

生產環境加固建議

  1. GTID 模式(5.6+):啟用 gtid_mode=ON,簡化故障切換
  2. 半同步複製:rpl_semi_sync_master=ON,至少一台 Slave 收到 Binlog 才提交
  3. 多線程複製(5.7+):slave_parallel_workers=4,提升 SQL 線程吞吐
  4. 監控告警:監控 Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running
  5. 備份策略:Slave 定期全量備份,Master 定期 Binlog 備份

核心原則:配置文件參數對稱、防火牆放行 3306、專用複製賬號最小權限、關鍵位點記錄備份。搭建後必須做故障演練(殺 Slave、殺 Master、網絡斷開)。

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