採用「停機拷貝 + 配置雙端 + CHANGE MASTER TO 動態同步」標準化流程,避免鎖表長時間阻塞業務,支援動態參數調整。驗證環境:MySQL 5.x/8.x 通用。
systemctl stop mysqld # 主從均執行
# 主庫
tar czf /backup/mysql_data.tar.gz /var/lib/mysql/
scp /backup/mysql_data.tar.gz slave_ip:/backup/
# 從庫
tar xzf /backup/mysql_data.tar.gz -C /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
優勢:比 mysqldump 快 10 倍+,保留表空間、權限、統計信息完整一致。
my.cnf (通常無需改動,默認即主庫模式)[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW # 推薦 ROW 格式,減少主從不一致
# binlog-do-db=business_db # 可選:只記錄業務庫
my.cnf 核心配置[mysqld]
server-id=2 # 唯一,≠1
master-host=192.168.1.100 # 主庫 IP
master-user=repl_user
master-password=repl_pass
master-port=3306
master-connect-retry=60
replicate-do-db=business_db # 可選:只同步業務庫
relay-log=relay-bin
relay-log-index=relay-bin.index
log-slave-updates=1 # 支持鏈式複製
read-only=1 # 防誤寫入
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.1.%' IDENTIFIED BY 'repl_pass';
FLUSH PRIVILEGES;
systemctl start mysqld
SHOW MASTER STATUS\G;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 | 39259 | | |
+------------------+----------+--------------+------------------+
-- 從庫客戶端
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl_user',
MASTER_PASSWORD='repl_pass',
MASTER_LOG_FILE='mysql-bin.000007', -- 第七步記錄的 File
MASTER_LOG_POS=39259; -- 第七步記錄的 Position
START SLAVE;
SHOW SLAVE STATUS\G;
關鍵成功指標:Slave_IO_Running: Yes、Slave_SQL_Running: Yes、Seconds_Behind_Master: 0
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='new_master_ip',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000010',
MASTER_LOG_POS=120;
START SLAVE;
適用場景:主庫遷移、Binlog 清理後重新同步、故障切換。
FLUSH TABLES WITH READ LOCK;STOP SLAVE;SHOW MASTER STATUS; 記錄新 File、PositionUNLOCK TABLES;CHANGE MASTER TO MASTER_LOG_FILE='new_file', MASTER_LOG_POS=new_pos;START SLAVE;PURGE MASTER LOGS TO 'new_file'; (保留從庫未處理的日志)| 現象 | 排查命令 | 典型原因 | 解決 |
|---|---|---|---|
| IO 線程 No | SHOW SLAVE STATUS\G 看 Last_IO_Error | 網絡不通、賬號密碼錯、主庫 Binlog 丟失 | 檢查防火牆、重建賬號、重新搭建從庫 |
| SQL 線程 No | 看 Last_SQL_Error | 主從數據不一致、DDL 衝突、外鍵約束 | SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; (慎用) |
| 延遲高 | Seconds_Behind_Master 大 | 從庫硬件弱、大事務、長查詢阻塞 | 優化從庫硬件、並行複製 slave_parallel_workers |
| 主鍵衝突 | Error 1062 | 雙主未配置 auto_increment_offset | 配置 auto_increment_offset/increment |