MySQL 主從複製是讀寫分離、災備、數據分發的基礎架構。本文基於 CentOS 5.6 + MySQL 5.5.8 環境,詳細記錄一主一從搭建全流程、關鍵參數解析、同步異常處理方案。
| 角色 | OS | MySQL | IP | Server ID |
|---|---|---|---|---|
| Master | CentOS 5.6 | 5.5.8 | 192.168.1.2 | 1 |
| Slave | CentOS 5.6 | 5.5.8 | 192.168.1.3 | 2 |
[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,配合上項保證「不丟數據」-- 創建專用複製用戶(限定 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
# Master 端導出並管道導入 Slave(單庫 test 為例)
/usr/bin/mysqldump test -uroot -padmin --opt | mysql test -uroot -padmin -h 192.168.1.3
UNLOCK TABLES;
[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 庫(可配置多行或用通配符)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 行
現象:Slave_SQL_Running: No,Last_SQL_Error 顯示具體錯誤。
方案:跳過錯誤事務(謹慎使用,確認數據可接受不一致):
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;
更佳做法:分析錯誤原因 → Master 修正數據 → Slave 手動執行補償 → 恢復同步。
現象:Got fatal error 1236: Could not find first log file name in binary log index file
方案:重新同步(見下文「主從不同步修復」)。
# 推薦工具:pt-table-checksum (Percona Toolkit)
pt-table-checksum --databases=test --recursion-method=hosts \
h=192.168.1.2,u=root,p=admin
gtid_mode=ON,簡化故障切換rpl_semi_sync_master=ON,至少一台 Slave 收到 Binlog 才提交slave_parallel_workers=4,提升 SQL 線程吞吐Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running核心原則:配置文件參數對稱、防火牆放行 3306、專用複製賬號最小權限、關鍵位點記錄備份。搭建後必須做故障演練(殺 Slave、殺 Master、網絡斷開)。