兩個業務實例,主從 Com_insert 表現截然不同:
-- 業務 1:Statement 格式
Master: Com_insert=133 Slave: Com_insert=135 ✓ 基本一致
-- 業務 2:Row 格式
Master: Com_insert=92 Slave: Com_insert=0 ✗ 從庫歸零
唯一差異:binlog_format(Statement vs ROW)。
Com_xxx:「每種 xxx 語句執行的次數」。
Com_insert計數INSERT語句執行次數(批量插入計 1 次)。
ROW 格式限制:「無法通過日志查看執行了什麼語句,從庫也無法看到接收並執行了什麼語句」。
INSERT 語句 → 解析執行 → Com_insert++ → 寫入 Binlog(ROW 格式記錄行變更,非語句)。Com_xxx 是 Server 層語句計數器,ROW 復制繞過 Server 層直接進 Engine 層,自然不計數。SHOW GLOBAL STATUS LIKE 'Innodb_rows_inserted';
+----------------------+------------+
| Variable_name | Value |
+----------------------+------------+
| Innodb_rows_inserted | 2666049650 |
+----------------------+------------+
Innodb_rows_updated、Innodb_rows_deleted、Innodb_rows_read。| 場景 | 主庫核心指標 | 從庫核心指標 | 備註 |
|---|---|---|---|
| Statement/Mixed Binlog | Com_insert, Com_update, Com_delete | Com_insert, Com_update, Com_delete | 主從可直接對比 |
| ROW Binlog | Com_insert + Innodb_rows_inserted | Innodb_rows_inserted, Innodb_rows_updated | 從庫必看 Engine 層計數 |
| 跨版本/異構復制 | 同上 | Innodb_rows_xxx 統一口徑 | 消除格式差異 |
# 從庫寫入速率異常(PromQL)
rate(mysql_global_status_innodb_rows_inserted[5m]) < 10
AND on(instance) rate(mysql_global_status_com_insert[5m]) > 100
# 主從延遲配合行數差異檢測
mysql_slave_status_seconds_behind_master > 30
AND abs(master_innodb_rows_inserted - slave_innodb_rows_inserted) > 10000