MySQL BlackHole引擎

概念

像MyISAM、InnoDB,BlackHole是另外一種MySQL引擎,從字面意思來看,
其表現就像一個黑洞,只進不出,進來就消失。換句話說,任何往其中寫的數據都將丟失,有點像Linux的/dev/null
好比一個表test的引擎是BlackHole,任何對這個表的insert都將丟失,
對它的select永遠返回空集,對應的數據目錄下只有一個test.frm文件,且沒有其餘文件與之關聯。mysql

使用場景

一個並不保存任何數據的引擎,到底有什麼意義?
關鍵在於,雖然其不保存數據,但對數據庫的操做仍舊記錄在binlog日誌中。
這就帶來一個好處,能夠將其做爲主從複製的中介,將原來從主庫中同步的操做變爲從做爲中介的BlackHole引擎數據庫中同步。sql

1.做爲僞主庫分擔主庫負擔

衆所周知,當從庫比較多的時候,全部從庫都從主庫load數據將加劇主庫的負擔。但若是是從BlackHole的僞主庫中同步就能夠減輕主庫的負擔。原有主從架構大概就像下面這樣:數據庫

圖片描述

如今,BlackHole僞主庫做爲中介,變成這樣:

圖片描述

特別是,能夠在僞主庫中配置replicate-do和replicate-ignore規則,過濾不須要同步的表。架構

2.做爲binlog日誌收集器

其不保存實際數據,只記錄binlog的特性,使得該引擎可用於binlog日誌收集,便於數據庫分析。
相關知識:binlog日誌的format有三種:row,statement,mixed。
row的方式記錄每一行被改變的記錄,也就說,update將記錄全部符合條件被修改的行,alter table更慘,至關於重建整個表,記錄全部行的改變。因此這種格式下日誌容易過大;
statement的方式只記錄改變數據的SQL,沒有row方式的問題,但其會記錄該SQL執行的上下文信息,有個很差的地方是,該上下文信息在另外一端重現的時候,容易由於較複雜的信息負責出錯。
mixed的方式綜合row和statement的方式。spa

配置

在僞庫中,須要以下配置:
配置默認類型爲BlackHole,能夠用
default_table_type = BLACKHOLE
或是
default-storage-engine = BLACKHOLE
打開binlog:log-bin = ms-mysql-bin
特別要配置:log-slave-update = 1,只有這樣,主庫中的操做纔會同步到BlackHole的binlog中,不然,只有直接針對BlackHole的操做纔會記錄到binlog。
忽略InnoDB:skip-innodb,當建表語句帶有engine=innodb時,將使用默認的BlackHole引擎。
須要提醒的是,當採用這種架構時,數據同步多了中間一層,須要進一步考慮延遲問題。3d

相關文章
相關標籤/搜索