如果複寫來源伺服器沒有將陳述式寫入其二進制日誌,則該陳述式不會複寫。如果伺服器記錄了該陳述式,則該陳述式會傳送到所有副本,而每個副本會決定是否執行或忽略它。
在來源上,您可以使用 --binlog-do-db
和 --binlog-ignore-db
選項來控制要記錄變更的資料庫,以控制二進制日誌記錄。如需伺服器在評估這些選項時所使用規則的說明,請參閱 第 19.2.5.1 節「評估資料庫層級複寫和二進制日誌選項」。您不應使用這些選項來控制要複寫的資料庫和表格。而是應該在副本上使用篩選來控制要在副本上執行的事件。
在副本端,是否執行或忽略從來源收到的陳述式的決定,是根據副本啟動時所使用的 --replicate-*
選項。 (請參閱 第 19.1.6 節「複寫和二進制日誌選項與變數」)。這些選項所控制的篩選器也可以使用 CHANGE REPLICATION FILTER
陳述式動態設定。無論是使用 --replicate-*
選項在啟動時建立,還是由 CHANGE REPLICATION FILTER
在副本伺服器執行時建立,這些篩選器的規則都相同。請注意,複寫篩選器不能在設定為群組複寫的 MySQL 伺服器執行個體的群組複寫專用通道上使用,因為在某些伺服器上篩選交易會使群組無法就一致狀態達成協議。
在最簡單的情況下,當沒有 --replicate-*
選項時,副本會執行從來源收到的所有陳述式。否則,結果取決於所給予的特定選項。
資料庫層級選項(--replicate-do-db
、--replicate-ignore-db
)會先進行檢查;請參閱第 19.2.5.1 節,「評估資料庫層級複製和二進制記錄選項」以了解此程序的說明。如果未使用任何資料庫層級選項,則會接著檢查可能正在使用的任何資料表層級選項(請參閱第 19.2.5.2 節,「評估資料表層級複製選項」以了解這些選項的討論)。如果使用了一個或多個資料庫層級選項,但沒有任何選項符合,則不會複製該陳述式。
對於僅影響資料庫的陳述式(即CREATE DATABASE
、DROP DATABASE
和ALTER DATABASE
),資料庫層級選項始終優先於任何--replicate-wild-do-table
選項。換句話說,對於此類陳述式,只有在沒有適用的資料庫層級選項時,才會檢查--replicate-wild-do-table
選項。
為了更容易確定給定選項集的效果,建議您避免混合使用do-*
和ignore-*
選項,或包含萬用字元的選項與不包含萬用字元的選項。
如果指定了任何--replicate-rewrite-db
選項,則會在測試--replicate-*
篩選規則之前套用它們。
所有複製篩選選項都遵循與 MySQL 伺服器中其他位置的資料庫和資料表名稱相同的區分大小寫規則,包括lower_case_table_names
系統變數的影響。
篩選規則會在執行任何權限檢查之前套用;如果篩選掉交易,則不會對該交易執行權限檢查,因此不會因此而引發錯誤。請參閱第 19.5.1.30 節,「複製期間的複本錯誤」以了解更多資訊。