現象:show slave status 位置不動;show open tables 某表 In_use=1 持續;表無主鍵或索引差。
解法:
# 從庫停止復制
STOP SLAVE;
# 關閉 binlog 記錄本次 DDL
SET SQL_LOG_BIN=0;
# 添加高區分度索引 (優先放最左)
ALTER TABLE tbl ADD KEY idx_col (col);
# 若舊版本只用第一個索引,需刪舊建新調整順序
START SLAVE;
觀察 show engine innodb status 中 rows_inserted/updated/deleted/selected 判斷追趕速度。
解法:主庫臨時改 SET GLOBAL binlog_format=ROW 繞過語句級重放慢 SQL;長期優化 SQL 或加索引。
特徵:binlog 中單事務巨大 (幾百 MB 甚至 GB)。
解法:業務端拆分大事務,引入緩存/異步寫入,減少長事務鎖持有時間。
方案優先級排序:
deadline,SSD 用 noop,禁用默認 cfq。根因:xtrabackup 末尾 FLUSH TABLES WITH READ LOCK 鎖住 MyISAM,阻塞 SQL 線程。
根治:將 MyISAM 表轉為 InnoDB (ALTER TABLE t ENGINE=InnoDB)。
MariaDB 實現了基於組提交的並行復制,同一表不同行可並行重放,效果遠優於 Oracle MySQL 5.6 的庫級並行 (slave_parallel_workers)。實踐中 MariaDB 做從庫幾乎零延遲。