在評估複製選項時,複本會先檢查是否有任何 --replicate-do-db
或 --replicate-ignore-db
選項適用。當使用 --binlog-do-db
或 --binlog-ignore-db
時,過程類似,但選項是在來源上檢查。
所檢查的資料庫是否符合取決於正在處理的語句的二進制日誌格式。如果語句是使用列格式記錄的,則會檢查資料要變更的資料庫。如果語句是使用語句格式記錄的,則會檢查預設資料庫(以 USE
語句指定)。
只有 DML 陳述式才能使用列格式記錄。DDL 陳述式一律以陳述式形式記錄,即使 binlog_format=ROW
也是如此。因此,所有 DDL 陳述式一律根據基於陳述式的複寫規則進行篩選。這表示您必須使用 USE
陳述式明確選取預設資料庫,DDL 陳述式才能套用。
關於複寫,相關步驟列於此:
使用哪種記錄格式?
STATEMENT。測試預設資料庫。
ROW。測試受變更影響的資料庫。
是否有任何
--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
中變更資料的更新。