摘要:作為日志收集器其不保存實(shí)際數(shù)據(jù),只記錄的特性,使得該引擎可用于日志收集,便于數(shù)據(jù)庫(kù)分析。忽略,當(dāng)建表語(yǔ)句帶有時(shí),將使用默認(rèn)的引擎。需要提醒的是,當(dāng)采用這種架構(gòu)時(shí),數(shù)據(jù)同步多了中間一層,需要進(jìn)一步考慮延遲問(wèn)題。
概念
像MyISAM、InnoDB,BlackHole是另一種MySQL引擎,從字面意思來(lái)看,
其表現(xiàn)就像一個(gè)黑洞,只進(jìn)不出,進(jìn)來(lái)就消失。換句話說(shuō),任何往其中寫(xiě)的數(shù)據(jù)都將丟失,有點(diǎn)像Linux的/dev/null
比如一個(gè)表test的引擎是BlackHole,任何對(duì)這個(gè)表的insert都將丟失,
對(duì)它的select永遠(yuǎn)返回空集,對(duì)應(yīng)的數(shù)據(jù)目錄下只有一個(gè)test.frm文件,且沒(méi)有其他文件與之關(guān)聯(lián)。
一個(gè)并不保存任何數(shù)據(jù)的引擎,到底有什么意義?
關(guān)鍵在于,雖然其不保存數(shù)據(jù),但對(duì)數(shù)據(jù)庫(kù)的操作仍舊記錄在binlog日志中。
這就帶來(lái)一個(gè)好處,可以將其作為主從復(fù)制的中介,將原來(lái)從主庫(kù)中同步的操作變?yōu)閺淖鳛橹薪榈腂lackHole引擎數(shù)據(jù)庫(kù)中同步。
眾所周知,當(dāng)從庫(kù)比較多的時(shí)候,所有從庫(kù)都從主庫(kù)load數(shù)據(jù)將加重主庫(kù)的負(fù)擔(dān)。但如果是從BlackHole的偽主庫(kù)中同步就可以減輕主庫(kù)的負(fù)擔(dān)。原有主從架構(gòu)大概就像下面這樣:
現(xiàn)在,BlackHole偽主庫(kù)作為中介,變成這樣:
特別是,可以在偽主庫(kù)中配置replicate-do和replicate-ignore規(guī)則,過(guò)濾不需要同步的表。
2.作為binlog日志收集器其不保存實(shí)際數(shù)據(jù),只記錄binlog的特性,使得該引擎可用于binlog日志收集,便于數(shù)據(jù)庫(kù)分析。
相關(guān)知識(shí):binlog日志的format有三種:row,statement,mixed。
row的方式記錄每一行被改變的記錄,也就說(shuō),update將記錄所有符合條件被修改的行,alter table更慘,相當(dāng)于重建整個(gè)表,記錄所有行的改變。所以這種格式下日志容易過(guò)大;
statement的方式只記錄改變數(shù)據(jù)的SQL,沒(méi)有row方式的問(wèn)題,但其會(huì)記錄該SQL執(zhí)行的上下文信息,有個(gè)不好的地方是,該上下文信息在另一端重現(xiàn)的時(shí)候,容易因?yàn)檩^復(fù)雜的信息負(fù)責(zé)出錯(cuò)。
mixed的方式綜合row和statement的方式。
在偽庫(kù)中,需要如下配置:
配置默認(rèn)類型為BlackHole,可以用
default_table_type = BLACKHOLE
或是
default-storage-engine = BLACKHOLE
打開(kāi)binlog:log-bin = ms-mysql-bin
特別要配置:log-slave-update = 1,只有這樣,主庫(kù)中的操作才會(huì)同步到BlackHole的binlog中,否則,只有直接針對(duì)BlackHole的操作才會(huì)記錄到binlog。
忽略InnoDB:skip-innodb,當(dāng)建表語(yǔ)句帶有engine=innodb時(shí),將使用默認(rèn)的BlackHole引擎。
需要提醒的是,當(dāng)采用這種架構(gòu)時(shí),數(shù)據(jù)同步多了中間一層,需要進(jìn)一步考慮延遲問(wèn)題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/17632.html
摘要:提供了一套統(tǒng)一的應(yīng)用開(kāi)發(fā)模型和核心,因此,盡管不同的存儲(chǔ)引擎擁有不同的特性,不過(guò)對(duì)于開(kāi)發(fā)人員,應(yīng)用操作都是完全透明的。 Mysql 提供了一套統(tǒng)一的應(yīng)用開(kāi)發(fā)模型和核心 API,因此,盡管不同的存儲(chǔ)引擎擁有不同的特性,不過(guò)對(duì)于開(kāi)發(fā)人員,應(yīng)用操作都是完全透明的。應(yīng)用層的連接并不直接訪問(wèn)存儲(chǔ)引擎層,而是訪問(wèn) Mysql 提供的 Api,也就是說(shuō)不管所操作的表對(duì)象使用什么存儲(chǔ)引擎,讀寫(xiě)數(shù)據(jù)時(shí)執(zhí)...
閱讀 2054·2021-10-08 10:04
閱讀 3079·2021-09-22 10:02
閱讀 2225·2019-08-30 15:56
閱讀 825·2019-08-30 15:54
閱讀 921·2019-08-30 15:54
閱讀 1276·2019-08-30 15:53
閱讀 2508·2019-08-30 11:21
閱讀 3557·2019-08-30 10:56