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" 參數啟動。
在 CentOS/RHEL/Scientific Linux 6 下安裝 LAMP (Apache with MariaDB and PHP)
MariaDB Proxy讀寫分離的實現
MariaDB 的詳細介紹:請點這裡
MariaDB 的:請點這裡
本文永久更新連結地址: