你對MySQL BlackHole引擎有多少了解?

藏色散人
發布: 2021-09-14 17:43:30
轉載
1478 人瀏覽過

概念

像MyISAM、InnoDB,BlackHole是另一個MySQL引擎,從字面意思來看,
其表現就像一個黑洞,只進不出,進來就消失。換句話說,任何往其中寫的資料都會遺失,有點像Linux的/dev/null
例如一個表test的引擎是BlackHole,任何對這個表的insert都會遺失,
對它的select永遠傳回空集,對應的資料目錄下只有一個test.frm文件,且沒有其他文件與之關聯。

使用場景

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

1.作為偽主庫分擔主庫負擔

眾所周知,當從庫比較多的時候,所有從庫都從主庫load資料將加重主庫的負擔。但如果是從BlackHole的偽主函式庫中同步就可以減輕主函式庫的負擔。原有主從架構大概就像下面這樣:

你對MySQL BlackHole引擎有多少了解?

现在,BlackHole伪主库作为中介,变成这样:
登入後複製

你對MySQL 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的方式。

配置

在偽庫中,需要如下配置:
配置預設類型為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引擎。
需要提醒的是,當採用這種架構時,資料同步多了中間一層,需要進一步考慮延遲問題。

推薦學習:《mysql影片教學

#

以上是你對MySQL BlackHole引擎有多少了解?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!