首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 複製過濾規則配置避坑指南

     編輯:MySQL 資料庫相關知識

MySQL 複製過濾規則(replicate-do-db、replicate-ignore-db、replicate-do-table 等)在 Statement 與 Row 兩種格式下行為差異巨大,配置不當極易導致數據不一致或復制中斷。

核心原則

  1. 勿混用 do 與 ignore 同級規則,邏輯衝突且難以維護。
  2. 優先使用表級過濾(replicate-do-table=db.tbl),行為在 Statement/Row 下一致。
  3. Statement 格式必須配合 USE db 語句,否則跨庫操作(INSERT INTO db.tbl)會被錯誤過濾。
  4. Row 格式無視 USE,基於實際行變更決策,兼容性最強。

典型場景對比表

配置SQL 模式Statement 結果Row 結果
replicate-do-db=db1
replicate-ignore-db=db2
USE db1; INSERT...✅ 復制✅ 復制
同上INSERT INTO db1.tbl...(無 USE)❌ 忽略✅ 復制
replicate-do-table=db1.tbl1任意✅ 復制✅ 復制
replicate-ignore-db=db1
replicate-do-table=db2.tbl2
USE db1; INSERT INTO db2.tbl2...❌ 被 DB 規則攔截✅ 表規則生效,復制成功

最佳實踐建議

  • 生產環境**強制使用 Row 格式**(binlog_format=ROW),消除 Statement 格式的諸多邊界問題。
  • 若必須用 Statement,統一規範:所有跨庫操作前必須 USE 目標庫,且僅配置 replicate-do-table 白名單。
  • 定期對比主從 CHECKSUM TABLE 或 pt-table-checksum 驗證一致性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved