1. 程式人生 > >數據庫 之 Mysql復制過濾器

數據庫 之 Mysql復制過濾器

選項 thread ignore ron 配置文件 cat 主服務器 註意 就會

復制過濾器:僅復制有限一個或幾個數據庫相關的數據,而非所有;由復制過濾器進行;

有兩種過濾方式,在主服務器上進行過濾或者是在從服務器上進行過濾

(1) 主服務器上過濾

實現有選擇的復制,只復制主節點上的一部分,從源頭上選擇幾個庫主節點過濾,寫入二進制日誌的時候有選擇,影響其他庫的時間點還原

主服務器僅向二進制日誌中記錄有關特定數據庫相關的寫操作;

問題:其它庫的time-point recovery將無從實現,影響其他庫的時間點還原;

主節點上使用以下的選項,以下是黑白名單,同一庫二者選其一即可

binlog_do_db= #白名單,向binlog中寫入哪些庫的二進制log,多個庫名用逗號分隔

binlog_ignore_db=#黑名單,此處寫入的庫不記錄二進制log,多個庫用逗號隔開

但是這裏有個問題是,如果某個庫故障,要還原的時候就會出問題,所以一般不在主節點上過濾,主節點建議將所有的庫都寫入二進制日誌。

(2) 從服務器上過濾

從服務器的SQL THREAD僅重放關註的數據庫或表相關的事件,並將其應用於本地;

問題:會消耗更多的網絡IO和磁盤IO;

重放庫的選擇:

Replicate_Do_DB=

Replicate_Ignore_DB=

重放表的選擇:

Replicate_Do_Table=

Replicate_Ignore_Table=

這兩個和上面兩個類似,下面的表可以使用通配符

Replicate_Wild_Do_Table=

Replicate_Wild_Ignore_Table=

如果同一庫既被允許,又被拒絕,則該庫將被復制

例子

假設主服務器上有一個庫為sunnydb,但是從服務器重放時不重放該數據庫,因此在從服務器73上設定如下,

註意,設定前要先關閉slave進程

MariaDB [test2]> stop slave;

MariaDB [test2]> set @@global.Replicate_ignore_DB=sunnydb;#該參數建議寫入配置文件,否則下次重啟就會失效

那麽在主服務器71上創建數據庫sunnydb,該庫的所有二進制信息都會被復制到從服務器的slave_log,但是都不會被從服務器73上的sql線程重放sunnydb庫的數據。

數據庫 之 Mysql復制過濾器