文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  複製篩選選項之間的交互作用

19.2.5.3 複製篩選選項之間的交互作用

如果您使用資料庫層級與資料表層級複製篩選選項的組合,副本會先使用資料庫選項接受或忽略事件,然後它會根據資料表選項評估這些選項允許的所有事件。這有時會導致看起來違反直覺的結果。同樣重要的是要注意,結果會因操作是否使用基於陳述式或基於列的二進制日誌格式記錄而有所不同。如果您想要確保您的複製篩選器始終以相同的方式運作,而與二進制日誌格式無關,這在您使用混合二進制日誌格式時尤其重要,請遵循本主題中的指南。

由於資料庫名稱的識別方式不同,二進位日誌格式會影響複寫篩選選項的效果。使用語句式格式時,DML 語句會根據目前資料庫(由 USE 語句指定)來處理。使用資料列式格式時,DML 語句會根據修改後的資料表所在的資料庫來處理。DDL 語句一律根據目前資料庫(由 USE 語句指定)來篩選,無論二進位日誌格式為何。

涉及多個資料表的操作也可能因二進位日誌格式而受到複寫篩選選項的不同影響。需要注意的操作包括:涉及多資料表 UPDATE 語句的交易、觸發器、串聯式外部索引鍵、更新多個資料表的預存函式,以及呼叫更新一個或多個資料表的預存函式的 DML 語句。如果這些操作更新了篩選包含和篩選排除的資料表,則結果可能會因二進位日誌格式而有所不同。

如果您需要確保複寫篩選器的運作方式一致(無論二進位日誌格式為何),尤其是當您使用混合二進位日誌格式 (binlog_format=MIXED) 時,請僅使用資料表層級的複寫篩選選項,而不要使用資料庫層級的複寫篩選選項。此外,請勿使用更新篩選包含和篩選排除資料表的多資料表 DML 語句。

如果您需要結合使用資料庫層級和資料表層級的複寫篩選器,並希望這些篩選器盡可能一致地運作,請選擇下列其中一種策略:

  1. 如果您使用資料列式二進位日誌格式 (binlog_format=ROW),對於 DDL 語句,請依賴 USE 語句來設定資料庫,而不要指定資料庫名稱。您可以考慮變更為資料列式二進位日誌格式,以改善複寫篩選的一致性。如需有關變更二進位日誌格式的適用條件,請參閱第 7.4.4.2 節「設定二進位日誌格式」

  2. 如果您使用語句式或混合式二進位日誌格式 (binlog_format=STATEMENTMIXED),對於 DML 和 DDL 語句,請依賴 USE 語句,而不要使用資料庫名稱。此外,請勿使用更新篩選包含和篩選排除資料表的多資料表 DML 語句。

範例 19.7:--replicate-ignore-db 選項和 --replicate-do-table 選項

在複寫來源伺服器上,會發出下列語句:

USE db1;
CREATE TABLE t2 LIKE t1;
INSERT INTO db2.t3 VALUES (1);

複本已設定下列複寫篩選選項:

replicate-ignore-db = db1
replicate-do-table = db2.t3

DDL 語句 CREATE TABLE 會在 db1 中建立資料表,如同先前 USE 語句所指定。複本會根據其 --replicate-ignore-db = db1 選項篩選掉此語句,因為 db1 是目前資料庫。無論複寫來源伺服器上的二進位日誌格式為何,此結果都相同。但是,DML INSERT 語句的結果會因二進位日誌格式而有所不同。

如果複本上需要 --replicate-ignore-db = db1 選項,且也必須在來源伺服器上使用語句式 (或混合式) 二進位日誌格式,則可以從 INSERT 語句中省略資料庫名稱,並改為依賴 USE 語句,來使結果一致,如下所示:

USE db1;
CREATE TABLE t2 LIKE t1;
USE db2;
INSERT INTO t3 VALUES (1);

在此情況下,複本一律會根據資料庫 db2 來評估 INSERT 語句。無論操作以語句式或資料列式二進位格式記錄,結果都保持不變。