MySQL 複製過濾規則(replicate-do-db、replicate-ignore-db、replicate-do-table 等)在 Statement 與 Row 兩種格式下行為差異巨大,配置不當極易導致數據不一致或復制中斷。
do 與 ignore 同級規則,邏輯衝突且難以維護。replicate-do-table=db.tbl),行為在 Statement/Row 下一致。USE db 語句,否則跨庫操作(INSERT INTO db.tbl)會被錯誤過濾。USE,基於實際行變更決策,兼容性最強。| 配置 | SQL 模式 | Statement 結果 | Row 結果 |
|---|---|---|---|
replicate-do-db=db1replicate-ignore-db=db2 | USE db1; INSERT... | ✅ 復制 | ✅ 復制 |
| 同上 | INSERT INTO db1.tbl...(無 USE) | ❌ 忽略 | ✅ 復制 |
replicate-do-table=db1.tbl1 | 任意 | ✅ 復制 | ✅ 復制 |
replicate-ignore-db=db1replicate-do-table=db2.tbl2 | USE db1; INSERT INTO db2.tbl2... | ❌ 被 DB 規則攔截 | ✅ 表規則生效,復制成功 |
binlog_format=ROW),消除 Statement 格式的諸多邊界問題。USE 目標庫,且僅配置 replicate-do-table 白名單。CHECKSUM TABLE 或 pt-table-checksum 驗證一致性。