MySQL 透過主從複製實現熱備份:主庫啟用二進制日誌,從庫透過 I/O 執行緒拉取日誌、SQL 執行緒重放,實現資料即時同步。版本要求:主從 ≥ 3.23,從庫版本 ≥ 主庫版本。
server-id=1
log-bin=mysql-bin
binlog-do-db=db1,db2
binlog-ignore-db=test,mysql
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.domain.com' IDENTIFIED BY 'slavepass';
service mysqld restart
mysql> FLUSH TABLES WITH READ LOCK;
# 物理複製 data 目錄或 mysqldump --master-data=1
mysql> UNLOCK TABLES;
mysql> SHOW MASTER STATUS\G;
# 記錄 File、Position
server-id=2
master-host=master_ip
master-port=3306
master-user=repl
master-password=slavepass
master-connect-retry=60
report-host=slave_ip
將主庫備份資料放入從庫 data 目錄。
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='mysql-bin.003',
MASTER_LOG_POS=73;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Last_IO_Error:
Last_SQL_Error:
| 現象 | 可能原因 | 處理 |
|---|---|---|
| IO_Running=No | 網路/帳號/防火牆/主機名解析 | 檢查連通性、授權、防火牆、/etc/hosts |
| SQL_Running=No | 主鍵衝突/字元集/外鍵/觸發器 | 查 Last_SQL_Error,跳過錯誤或修復資料 |
| Seconds_Behind_Master 大 | 從庫寫入慢/長事務/單執行緒 | 優化從庫參數、升級 5.6+ 開啟平行複製 |
pt-heartbeat 或 pt-table-checksum 定期驗證主從一致性read_only=1、super_read_only=1 防止誤寫入slave_skip_errors=1062,1032 忽略常見主鍵/找不到記錄錯誤(謹慎使用)