環境規劃
| 角色 | IP | Server ID |
| Master | 10.130.30.212 | 1 |
| Slave | 10.130.30.214 | 2 |
軟體安裝(RHEL 5 x86_64,RPM 方式)
rpm -ivh MySQL-server-community-5.1.30-0.rhel5.x86_64.rpm \
MySQL-client-community-5.1.30-0.rhel5.x86_64.rpm
mysqladmin -u root password 'wlsun'
Master 配置
cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
vi /etc/my.cnf
# [mysqld] 區段新增:
log-bin=mysql-bin
binlog-ignore-db=mysql
server-id=1
service mysql restart
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.130.30.214' IDENTIFIED BY 'replication';
SHOW MASTER STATUS;
# 記錄 File 與 Position(如 mysql-bin.000005, 106)
Slave 配置
cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
vi /etc/my.cnf
# [mysqld] 區段新增/修改:
server-id=2
master-host=10.130.30.212
master-user=replication
master-password=replication
master-port=3306
# 建議補全:
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1
skip-slave-start=1
service mysql restart
mysql -u root -p
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='10.130.30.212',
MASTER_PORT=3306,
MASTER_USER='replication',
MASTER_PASSWORD='replication',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=106;
START SLAVE;
SHOW SLAVE STATUS\G
# 確認 Slave_IO_Running=Yes, Slave_SQL_Running=Yes
驗證測試
# Master 建庫建表寫入
CREATE DATABASE lingfeng;
USE lingfeng;
CREATE TABLE userid (id INT);
INSERT INTO userid VALUES (1),(2),(3),(4),(5);
# Slave 查詢
USE lingfeng;
SELECT * FROM userid;
# 應回傳 5 筆資料
生產環境強化清單
- GTID 模式(MySQL 5.6+):
gtid_mode=ON; enforce_gtid_consistency=ON,簡化故障切換。
- 半同步複寫:
rpl_semi_sync_master_enabled=1,降低資料遺失風險。
- 複寫過濾:
replicate-do-db/replicate-ignore-db 控制同步範圍。
- 監控告警:
Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running 接入 Prometheus/Grafana。
- 備份策略:Slave 端定時
mysqldump --single-transaction --master-data=2 或 Percona XtraBackup 熱備。
常見故障快速排查
| 現象 | 可能原因 | 處理 |
| IO_Running=No | 網路不通、認證失敗、Master binlog 損壞 | 檢查防火牆、CHANGE MASTER TO 重指定 File/Pos |
| SQL_Running=No | 主鍵衝突(1062)、DDL 不相容、外鍵失敗 | SET GLOBAL sql_slave_skip_counter=1 或重建 Slave |
| 延遲飆高 | 長事務、無索引大量更新、Slave 規格不足 | 優化 SQL、升級硬體、啟用並行複寫 slave_parallel_workers |