MYSQL中的BlackHole引擎
MYSQL中的BlackHole引擎
http://blog.csdn.net/ylspirit/article/details/7234021
http://blog.chinaunix.net/uid-22646981-id-3271711.html
MySQL在5.x系列提供了Blackhole引擎–“黑洞”.? 其作用正如其名字一樣:任何寫(xiě)入到此引擎的數(shù)據(jù)均會(huì)被丟棄掉, 不做實(shí)際存儲(chǔ);Select語(yǔ)句的內(nèi)容永遠(yuǎn)是空。 和Linux中的 /dev/null 文件完成的作用完全一致。
那么, 一個(gè)不能存儲(chǔ)數(shù)據(jù)的引擎有什么用呢?
Blackhole雖然不存儲(chǔ)數(shù)據(jù),但是MySQL還是會(huì)正常的記錄下Binlog,而且這些Binlog還會(huì)被正常的同步到Slave上,可以在Slave上對(duì)數(shù)據(jù)進(jìn)行后續(xù)的處理。 這樣對(duì)于在Master上只需要Binlog而不需要數(shù)據(jù)的場(chǎng)合下,balckhole就有用了。
BlackHole 還可以用在以下場(chǎng)景
Mysql復(fù)制架構(gòu)
?
?
這是mysql主從復(fù)制最基本的原理圖,左邊是主master,右邊是從slave,從圖中可以清晰看到mysql的復(fù)制進(jìn)程,master產(chǎn)生二進(jìn)制日志binlog,輸出到binlog文件,然后slave主機(jī)請(qǐng)求日志文件,master主機(jī)發(fā)送二進(jìn)制到slave主機(jī),二進(jìn)制到slave后,寫(xiě)入中繼日志,realylog,然后slave主機(jī)調(diào)用sql進(jìn)程讀取中繼日志內(nèi)容,寫(xiě)入到數(shù)據(jù)庫(kù),從而維持服務(wù)器的數(shù)據(jù)同步。
?
和上面不同的是,這個(gè)架構(gòu)是一個(gè)三級(jí)架構(gòu),三臺(tái)mysql服務(wù)器組成一個(gè)鏈?zhǔn)綇?fù)制架構(gòu)
,從左至右的master–slave–slave,前面兩個(gè),即master–slave和第一個(gè)圖一樣,沒(méi)什么可說(shuō)的,唯一的小變化是中間的slave主機(jī)也開(kāi)啟了二進(jìn)制日志,他把從master上更新到的信息寫(xiě)入自身的logbin中,這樣的目的可以從圖中看到,為后面的slave主機(jī)提供二進(jìn)制日志,此時(shí)這臺(tái)slave主機(jī)其實(shí)充當(dāng)了master主機(jī)的作用。
?
這個(gè)圖中說(shuō)明了mysql二進(jìn)制日志的過(guò)濾,除非你想同步所有的數(shù)據(jù)庫(kù)(包括mysql數(shù)據(jù)庫(kù),這會(huì)造成不必要的麻煩),二進(jìn)制的日志過(guò)濾主要取決于master主機(jī)的設(shè)置binlog_do_db和binlog_ignore_db,他們決定了什么數(shù)據(jù)會(huì)記錄到二進(jìn)制日志中,并傳送到slave主機(jī),而slave主機(jī)也可以通過(guò)配置一些選項(xiàng)決定怎么利用這些數(shù)據(jù),如replicate_do_db,replicate_do_table等
?
這個(gè)是一主多從的復(fù)制架構(gòu),實(shí)際應(yīng)用也很多,可以用master來(lái)充當(dāng)更新服務(wù)器,其他的幾臺(tái)slave充當(dāng)只讀服務(wù)器,在一定程度上分擔(dān)了數(shù)據(jù)庫(kù)流 量,一定確保只在master上更新數(shù)據(jù)。
這個(gè)一個(gè)主主復(fù)制的架構(gòu),兩臺(tái)master互為主從,更新和讀取操作可以同時(shí)在兩臺(tái)上進(jìn)行
這是一個(gè)反例,這種復(fù)制是不被允許的,一臺(tái)slave不可能同時(shí)接受兩臺(tái)master的數(shù)據(jù),不過(guò)我們可以考慮其他的辦法來(lái)實(shí)現(xiàn),比如后面的blackhole數(shù)據(jù)存儲(chǔ)引擎就可以實(shí)現(xiàn)。
這個(gè)則是在主主復(fù)制架構(gòu)上的一個(gè)擴(kuò)展,每臺(tái)master下面還有一層slave結(jié)構(gòu)
這個(gè)其實(shí)也是主主復(fù)制結(jié)構(gòu)的擴(kuò)展(我的個(gè)人理解)只是master的結(jié)構(gòu)組成了一個(gè)環(huán)狀結(jié)構(gòu)
這個(gè)也就容易理解,在環(huán)狀結(jié)構(gòu)的基礎(chǔ)上又延伸出slave層。
這個(gè)圖不太好理解,因?yàn)橹虚g涉及到一個(gè)blackhole(黑洞)存儲(chǔ)引擎,blackhole其實(shí)就相當(dāng)于 linux系統(tǒng)中的/dev/null
主 要意思就是一主N從的結(jié)構(gòu),這里這個(gè)N可能會(huì)有很多,幾十臺(tái),百臺(tái),那這樣master主機(jī)就會(huì)為每臺(tái)slave主機(jī)分配出一個(gè)binlog dump進(jìn)程,這樣的話會(huì)嚴(yán)重影響master的性能,這樣可以考慮在主從之間添加一個(gè)分布式master,配置blackhole存儲(chǔ)引擎,他起到一個(gè) 中繼的作用,他接收數(shù)據(jù)但丟其他而不是存儲(chǔ),只是會(huì)把master的二進(jìn)制日志供下層的slave來(lái)讀取。
?
這里摘錄一段別人的解釋:
?
把blackhole引擎,用做slave,配置一些過(guò)濾規(guī)則,比如復(fù)制某些表、不復(fù)制某些表。然后也作為一個(gè)master,帶多個(gè)slave。這樣的好 處是省了一定的網(wǎng)絡(luò)帶寬,如果沒(méi)有blackhole做中間環(huán)節(jié),那么就需要把第一個(gè)master的所有日志都傳遞到各個(gè)slave上去。經(jīng)過(guò) blackhole這一個(gè)slave兼master過(guò)濾后再傳遞給多個(gè)slave,減少了帶寬占用。而使用blackhole引擎的原因是它不占硬盤(pán)空 間,作為一個(gè)中轉(zhuǎn),只負(fù)責(zé)記日志、傳日志。
?
BLACKHOLE?存儲(chǔ)引擎就像?“?黑洞?”?一樣,它接收數(shù)據(jù)但丟棄它而不是存儲(chǔ)它。查詢總是返回空集。
mysql>?CREATE?TABLE?test(i?INT,?c?CHAR(10))?ENGINE?=?BLACKHOLE;
Query?OK,?0?rows?affected?(0.01?sec)
mysql>?INSERT?INTO?test?VALUES(1,’record?one’),(2,’record?two’);
Query?OK,?2?rows?affected?(0.00?sec)
Records:?2?Duplicates:?0?Warnings:?0
mysql>?SELECT?*?FROM?test;
Empty?set?(0.00?sec)
雖然?BLACKHOLE?表不存儲(chǔ)任何數(shù)據(jù),但是如果開(kāi)啟二進(jìn)制日志?(?Binary?Log?),SQL?語(yǔ)句將被寫(xiě)入 日志,反之?SQL?語(yǔ)句會(huì) 被過(guò)濾掉。
BLACKHOLE?表的其他用途:
*??通 過(guò)對(duì)比開(kāi)啟和關(guān)閉二進(jìn)制日志?(?Binary?Log?)?時(shí)?BLACKHOLE?的性能,來(lái)計(jì)算二進(jìn)制日志記錄的開(kāi)銷。
*??BLACKHOLE?本質(zhì)上是一個(gè)?“?no-op?”?存儲(chǔ)引擎,它可能被用來(lái)查找與存儲(chǔ)引擎自身不相關(guān)的性能瓶頸
下面這兩張圖也是跟blackhole存儲(chǔ)相關(guān),等慢慢研究blackhole后再細(xì)細(xì)研究
最后這種情況大致的意思,有三臺(tái)mysql server,1,2和3,3做為復(fù)制從服務(wù)器,想同時(shí)復(fù)制1上的DB1和2上的DB2,這樣可以在2上引進(jìn)一個(gè)blackhole的DB1來(lái)解決問(wèn)題.
?
來(lái)源:http://blog.csdn.net/zhaohang1983/archive/2009/08/11/4432634.aspx
?
總結(jié)
以上是生活随笔為你收集整理的MYSQL中的BlackHole引擎的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Oracle的resetlogs机制浅析
- 下一篇: linux cmake编译源码,linu