MariaDB: 選擇性二進制日志事件
作為MariaDB一系列有趣特性的第一篇文章,我們從選擇性跳過復制binlog事件開始。MariaDB 5.5和10支持此特性。
默認情況下使用MySQL標準復制功能時,所有事件都記錄在二進制日志中,并復制到所有從機(可以過濾掉一些模式)。但使用此特性,可以在從機上跳過一些事件的復制,即使這些事件是被寫入到二進制日志中的。在二進制日志中保存那些事件對于時間點恢復來說總是有用的。
的確,當不需要復制一個事件時,我們通常會設置 sql_log_bin = 0 ,該事件就會被跳過:既不會寫入binlog也不會復制到從機。
然而使用此新特性,只需要設置一個會話級變量標記一些事件,就可以使這些事件寫入二進制日志,隨即在一些從機上被跳過。
而且該特性真的非常易于使用,你需要在主機上設置:
set skip_replication=1;
并在從機上設置replicate_events_marked_for_skip='FILTER_ON_MASTER' 或'FILTER_ON_SLAVE',主機上跳過的事件就不會被復制。
replicate_events_marked_for_skip得有效值包括:
REPLICATE(默認值) : 從機會復制被跳過的事件
FILTER_ON_SLAVE: 從機會跳過標記的事件并且不會復制
FILTER_ON_MASTER : 過濾操作會在主機完成,因此從機不會收到被跳過的事件從而節省網絡帶寬
這是一個很酷的特性,但是它在什么時候會特別有用呢?
用例:
在歸檔時使用它非常有意思。的確,很多時候當人們歸檔數據時,他們使用 pt-archiver 等工具刪除數據并在歸檔服務器上復制刪除的數據。
由于有了此特性,我們可以使一個從機不刪除那些數據,而不必使用歸檔服務器復制被刪除的數據。這將會快得多(更智能?),從而使歸檔服務器總是最新的。當然,在這種情況下 sql_log_bin = 0 會起作用(如果我們忽略時間點恢復)。
但是對于Galera Cluster呢?是的,這正是此特性非常酷的地方,如果我們在一個Galera Cluster節點上使用了 sql_log_bin = 0 ,其他所有節點都將會忽略刪除操作,從而使節點之間不一致。
所以,如果你使用一個異步從機作為Galera Cluster的歸檔服務器,此特性真的很有必要。
如下圖所示,你可以使一個MariaDB Galera Cluster節點加入 Percona XtraDB Cluster ,以便借助pt-archiver刪除歷史數據:
pt-archiveris 使用 --set-vars "skip_replication=1" 參數啟動。
本文地址:http://www.oschina.net/translate/mariadb-selective-binary-logs-events
原文地址:http://www.mysqlperformanceblog.com/2014/07/31/mariadb-selective-binary-logs-events/