MySQL在5.x系列提供了Blackhole引擎–「黑洞」. 其做用正如其名字同樣:任何寫入到此引擎的數據均會被丟棄掉, 不作實際存儲;Select語句的內容永遠是空。 和Linux中的 /dev/null 文件完成的做用徹底一致。
那麼, 一個不能存儲數據的引擎有什麼用呢?
在大規模的Mysql服務器集羣中,若是是存在一臺主服務,多臺從服務器,在繁忙的業務中,意味着主服務器每操做一個事件,都要往本身的二進制日誌中寫數據,同時還要往多臺從服務器發一次,N臺服務器指向一臺主服務器,那麼須要主服務器發送N次,會啓動N個線程,每一個線程各自從線程裏讀二進制日誌,那麼會有大量的IO,原本是爲主服務器減輕負擔的,那麼這樣只能形成壓力愈來愈大,那這樣master主機就會爲每臺slave主機分配出一個binlog dump進程,這樣的話會嚴重影響master的性能。mysql
解決這種問題能夠採用多級複製,主服務器仍是保持主位置A,再拿一臺服務器做爲從服務器B,主服務器A只啓動一個線程指向從服務器B,那麼B服務器再做爲其餘N臺服務器的主,那麼B就啓動了多個線程,怎麼給B服務器減輕壓力呢?sql
在主從之間添加一個分佈式master,配置blackhole存儲引擎,他起到一箇中繼的做用,他接收數據但丟其餘而不是存儲,只是會把master的二進制日誌供下層的slave來讀取。數據庫
第一,讓B服務器再也不執行查詢操做;
第二,讓B服務器再也不執行寫操做;
第三,負責多線程爲每一個從服務器提供數據,那麼就不須要在B服務器存儲數據了,可是須要提供二進制日誌和中繼日誌,但B服務器又不須要數據庫;服務器
把blackhole引擎,用作slave,配置一些過濾規則,好比複製某些表、不復制某些表。而後也做爲一個master,帶多個slave。這樣的好 處是省了必定的網絡帶寬,若是沒有blackhole作中間環節,那麼就須要把第一個master的全部日誌都傳遞到各個slave上去。通過 blackhole這一個slave兼master過濾後再傳遞給多個slave,減小了帶寬佔用。而使用blackhole引擎的緣由是它不佔硬盤空 間,做爲一箇中轉,只負責記日誌、傳日誌。網絡
如何設置呢?多線程
先查看一下當下mysql支持的引擎列表;分佈式
沒找到blackhole引擎,那麼接下來安裝。性能
mysql> INSTALL PLUGIN blackhole SONAME 'ha_blackhole.so';
要設置 default_storage_engine=blackhole 就能實現主從 使用不一致的存儲引擎。測試
補充:若是使用blackhole引擎建立的表,在執行insert操做後,再查詢,是沒有數據的,由於建立的時候只有.frm表結構文件。spa
BLACKHOLE總結