二進制日誌過濾器可以通過兩個選項從二進制日誌中過濾語句:binlog-do-db和binlog-ignore-db
一,binlog-do-db
使用 binlog-do-db=db_name。使用這個選項後,主服務器會判斷當前的數據庫(即USE選定的數據庫)是否是db_name,如果是,則會將更新記錄到二進制日誌中。在使用之後,其它所有沒有明顯指定的數據庫 都會被忽略。如果使用該選項,你應確保只對當前的數據庫進行更新。
在我服務器上有兩個數據庫,一個db_factory,另一個是db_user。在沒有使用這個選項之前,對兩個數據庫的更新操作都是立即會複製到從庫上的,但設置
binlog-do-db=db_factory
之後,對db_user的改動,都不會被從庫所複製。所以如果不是特別有需求,最好不要設置這個選項。當然如果是一個數據庫經常更新,其它的都是一樣的本地數據庫,可以不用於二進制日誌的後續操作的情況下,作爲一種優化手段,也是可以的。
一個需要特別注意的地方是,如果設置binlog-do-db=db_factory。但後續使用如下語句:
use db_user
insert into db_factory.employ ...........
此時,更新是不會被二進制日誌所接收的。
二,binlog-ignore-db
表示忽略某個特定的數據庫,而對其它數據庫進行復制的選項。其實上面的選項是表示“忽略其他數據庫,只記錄我進入日誌”,而這個選項可以表“忽略我,將其它數據庫記錄日誌”,對這外選項的使用,可以如下所示:
[mysqld]
binlog-ignore-db=db_factory
binlog-ignore-db=db_user
當然上面的binlog-do-db也可以使用多次記錄多個表需要被寫入二進制日誌。
三,選項規則
- 是否有binlog-do-db或binlog-ignore-db規則?
沒有:將語句寫入二進制日誌並退出。
有:執行下一步。 - 有一些規則(binlog-do-db或binlog-ignore-db或二者都有)。當前有一個數據庫,也就是是否用USE命令選擇數據庫?
沒有:不要寫入語句,並退出。
有:執行下一步。 - 有當前的數據庫。是否有binlog-do-db規則?
有:當前的數據庫是否匹配binlog-do-db規則? 如果是,則寫入並退出,如果不是,不寫入並退出。
沒有:執行下一步。 - 有一些binlog-ignore-db規則。當前的數據庫是否匹配binlog-ignore-db規則?
有:不要寫入語句,並退出。
沒有:寫入查詢並退出。