在評估複製選項時,副本首先檢查是否有任何 --replicate-do-db
或 --replicate-ignore-db
選項適用。當使用 --binlog-do-db
或 --binlog-ignore-db
時,流程類似,但選項會在來源上檢查。
檢查是否符合的資料庫取決於正在處理的陳述式的二進位日誌格式。如果陳述式是使用列格式記錄的,則檢查要變更資料的資料庫。如果陳述式是使用陳述式格式記錄的,則檢查預設資料庫(以 USE
陳述式指定)。
只有 DML 陳述式可以使用列格式記錄。DDL 陳述式一律記錄為陳述式,即使 binlog_format=ROW
也一樣。因此,所有 DDL 陳述式一律根據基於陳述式的複製規則進行篩選。這表示您必須使用 USE
陳述式明確選取預設資料庫,DDL 陳述式才能套用。
對於複製,涉及的步驟在此列出
使用哪種記錄格式?
陳述式。 測試預設資料庫。
列。 測試變更影響的資料庫。
是否有任何
--replicate-do-db
選項?是。 資料庫是否符合其中任何一個?
是。 繼續步驟 4。
否。 忽略更新並結束。
否。 繼續步驟 3。
是否有任何
--replicate-ignore-db
選項?是。 資料庫是否符合其中任何一個?
是。 忽略更新並結束。
否。 繼續步驟 4。
否。 繼續步驟 4。
繼續檢查資料表層級的複製選項(如果有的話)。如需這些選項檢查方式的說明,請參閱第 19.2.5.2 節,「資料表層級的複製選項評估」。
重要在此階段仍然允許的陳述式尚未實際執行。在檢查完所有資料表層級選項(如果有的話),並且該流程的結果允許執行陳述式之前,不會執行該陳述式。
對於二進位日誌,涉及的步驟在此列出
是否有任何
--binlog-do-db
或--binlog-ignore-db
選項?是。 繼續執行步驟 2。
否。 記錄該語句並結束。
是否有預設資料庫(是否已透過
USE
選取任何資料庫)?是。 繼續執行步驟 3。
否。 忽略該語句並結束。
存在預設資料庫。是否有任何
--binlog-do-db
選項?是。 其中是否有任何選項與該資料庫相符?
是。 記錄該語句並結束。
否。 忽略該語句並結束。
否。 繼續步驟 4。
是否有任何
--binlog-ignore-db
選項與該資料庫相符?是。 忽略該語句並結束。
否。 記錄該語句並結束。
對於基於語句的記錄,上述規則中對於 CREATE DATABASE
、ALTER DATABASE
和 DROP DATABASE
語句做了例外處理。在這些情況下,當判斷是否要記錄或忽略更新時,正在建立、變更或刪除的資料庫會取代預設資料庫。
--binlog-do-db
有時可能表示「「忽略其他資料庫」」。例如,當使用基於語句的記錄時,僅使用 --binlog-do-db=sales
執行的伺服器,不會將預設資料庫與 sales
不同的語句寫入二進位日誌。當使用具有相同選項的基於列的記錄時,伺服器只會記錄那些更改 sales
中資料的更新。