來源:MySQL 5.6.23,已啟用並行複寫 slave_parallel_workers=4。
操作:停庫 → 拷貝 datadir 到新機器(冷遷移) → 新機器 START SLAVE 爆錯:
Last_SQL_Error: Cannot execute the current event group in the parallel mode.
Encountered event Stop, relay-log name ./relay-log.000294, position 245347905
which prevents execution of this event group in parallel mode.
Reason: possible malformed group of events from an old master.
Last_SQL_Errno: 1755
datadir,包含未提交的事務、不完整的 Relay Log 事件群組。last_committed / sequence_number 判斷事件群組邊界;遷移帶來的中斷點導致群組不完整,協調器拒絕並行回放。possible malformed group of events from an old master 直指此問題。STOP SLAVE;SET GLOBAL slave_parallel_workers = 0;START SLAVE; 等待 Seconds_Behind_Master = 0。STOP SLAVE; SET GLOBAL slave_parallel_workers = 4; START SLAVE;slave_parallel_workers=0 退回單線程 SQL 執行緒,不做群組邊界檢查,可安全回放不完整事件群組。追平後,Relay Log 尾部已為完整事務邊界,再開啟並行即正常運作。
FLUSH TABLES WITH READ LOCK; 獲取一致性快照位置(SHOW MASTER STATUS)。xtrabackup --backup --target-dir=/backup/... 或 tar 整個 datadir(需確保無寫入)。UNLOCK TABLES;server-id、log_bin、relay_log、slave_parallel_workers=0(先關並行)。CHANGE MASTER TO ... MASTER_LOG_FILE=..., MASTER_LOG_POS=...; START SLAVE;Seconds_Behind_Master=0 且 Slave_IO_Running=Yes, Slave_SQL_Running=Yes。STOP SLAVE; SET GLOBAL slave_parallel_workers=4; START SLAVE;| 坑點 | 後果 | 對策 |
|---|---|---|
| 直接拷貝運行中 datadir | Relay Log 截斷、事件群組不完整、報 1755 | 必須 FLUSH TABLES WITH READ LOCK 或用 xtrabackup 熱備 |
| 遷移前未關閉並行複寫 | 協調器狀態殘留,啟動即報錯 | 目標機器 my.cnf 先設 slave_parallel_workers=0 |
| GTID 模式下未同步 gtid_executed | 啟動後 GTID 斷裂 | 備份時同時導出 gtid_executed,或用 MASTER_AUTO_POSITION=1 |
| server-id 衝突 | 複寫環路、資料衝突 | 目標機器務必設定唯一 server-id |