二進制日誌過濾器

二進制日誌過濾器可以通過兩個選項從二進制日誌中過濾語句: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也可以使用多次記錄多個表需要被寫入二進制日誌。


三,選項規則

  1. 是否有binlog-do-db或binlog-ignore-db規則?
    沒有:將語句寫入二進制日誌並退出。
    有:執行下一步。
  2. 有一些規則(binlog-do-db或binlog-ignore-db或二者都有)。當前有一個數據庫,也就是是否用USE命令選擇數據庫? 
    沒有:不要寫入語句,並退出。
    有:執行下一步。
  3. 有當前的數據庫。是否有binlog-do-db規則? 
    有:當前的數據庫是否匹配binlog-do-db規則? 如果是,則寫入並退出,如果不是,不寫入並退出。
    沒有:執行下一步。
  4. 有一些binlog-ignore-db規則。當前的數據庫是否匹配binlog-ignore-db規則? 
    有:不要寫入語句,並退出。
    沒有:寫入查詢並退出。
從上面的流程邏輯可以知道,如果binlog-do-db被設置了,binlog-ignore-db將會被忽略。

另外,在這兩個選項的應用過程中,要注意的是當前數據庫的選擇是通過USE來選擇,這一點很重要。



發佈了65 篇原創文章 · 獲贊 27 · 訪問量 58萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章