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