數據庫 之 Mysql復制過濾器
有兩種過濾方式,在主服務器上進行過濾或者是在從服務器上進行過濾
(1) 主服務器上過濾
實現有選擇的復制,只復制主節點上的一部分,從源頭上選擇幾個庫主節點過濾,寫入二進制日誌的時候有選擇,影響其他庫的時間點還原
主服務器僅向二進制日誌中記錄有關特定數據庫相關的寫操作;
問題:其它庫的time-point recovery將無從實現,影響其他庫的時間點還原;
主節點上使用以下的選項,以下是黑白名單,同一庫二者選其一即可
binlog_do_db= #白名單,向binlog中寫入哪些庫的二進制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復制過濾器