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