線上頻繁出現 Slave 延遲飆升,經排查發現:用戶刪除數據時,表無主鍵且無索引或過濾性極差,導致 Row 格式 Binlog 在 Slave 回放時逐行全表掃描,直接拖垮複制線程。
Seconds_Behind_Master: 1339 且持續增長 Slave_SQL_Running: Yes 但實際卡住
表 dmpush_message_temp 無主鍵,UPDATE ... SET stat=1 觸發全表更新。Binlog 行模式下,每行產生一條事件,22 萬行產生 22 萬條事件。Slave 回放時每條事件都全表掃描,IOPS 爆表、CPU 100%,複制彻底卡死。
kill -9 mysqld。skip-slave-start 啟動,清空問題表 TRUNCATE TABLE ...,啟動 Slave 並腳本跳過 1032 錯誤。LOCK TABLES ... READ,INSERT SELECT 導出;Slave 關閉 Binlog 重建表回寫。ALTER TABLE ... ADD id INT AUTO_INCREMENT PRIMARY KEY。結論:主鍵是 InnoDB 生命線,建表預設必加,優先自增整數。