MariaDB: 選擇性二進制日志事件

jopen 10年前發布 | 6K 次閱讀 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刪除歷史數據:

MariaDB: 選擇性二進制日志事件

pt-archiveris 使用 --set-vars "skip_replication=1"  參數啟動。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!