MySQL主從配置及原理,供大家參考,具體內(nèi)容如下
一、環(huán)境選擇:
1.Centos 6.5
2.MySQL 5.7
二、什么是MySQL主從復(fù)制
MySQL主從復(fù)制是其最重要的功能之一。主從復(fù)制是指一臺(tái)服務(wù)器充當(dāng)主數(shù)據(jù)庫服務(wù)器,另一臺(tái)或多臺(tái)服務(wù)器充當(dāng)從數(shù)據(jù)庫服務(wù)器,主服務(wù)器中的數(shù)據(jù)自動(dòng)復(fù)制到從服務(wù)器之中。對(duì)于多級(jí)復(fù)制,數(shù)據(jù)庫服務(wù)器即可充當(dāng)主機(jī),也可充當(dāng)從機(jī)。MySQL主從復(fù)制的基礎(chǔ)是主服務(wù)器對(duì)數(shù)據(jù)庫修改記錄二進(jìn)制日志,從服務(wù)器通過主服務(wù)器的二進(jìn)制日志自動(dòng)執(zhí)行更新。
三、MySQL主從復(fù)制的類型
1.基于語句的復(fù)制
主服務(wù)器上面執(zhí)行的語句在從服務(wù)器上面再執(zhí)行一遍,在MySQL-3.23版本以后支持。
缺點(diǎn):時(shí)間上可能不完全同步造成偏差,執(zhí)行語句的用戶也可能是不同一個(gè)用戶。
2.基于行的復(fù)制
把主服務(wù)器上面改編后的內(nèi)容直接復(fù)制過去,而不關(guān)心到底改變?cè)搩?nèi)容是由哪條語句引發(fā)的,在MySQL-5.0版本以后引入。
缺點(diǎn):比如一個(gè)工資表中有一萬個(gè)用戶,我們把每個(gè)用戶的工資+1000,那么基于行的復(fù)制則要復(fù)制一萬行的內(nèi)容,由此造成的開銷比較大,而基于語句的復(fù)制僅僅一條語句就可以了。
3.混合類型的復(fù)制
MySQL默認(rèn)使用基于語句的復(fù)制,當(dāng)基于語句的復(fù)制會(huì)引發(fā)問題的時(shí)候就會(huì)使用基于行的復(fù)制,MySQL會(huì)自動(dòng)進(jìn)行選擇。
在MySQL主從復(fù)制架構(gòu)中,讀操作可以在所有的服務(wù)器上面進(jìn)行,而寫操作只能在主服務(wù)器上面進(jìn)行。主從復(fù)制架構(gòu)雖然給讀操作提供了擴(kuò)展,可如果寫操作也比較多的話(多臺(tái)從服務(wù)器還要從主服務(wù)器上面同步數(shù)據(jù)),單主模型的復(fù)制中主服務(wù)器勢必會(huì)成為性能瓶頸。
四、原理
1.主從(master-slave)
主服務(wù)器上面的任何修改都會(huì)保存在二進(jìn)制日志Binary log里面,從服務(wù)器上面啟動(dòng)一個(gè)I/O thread(實(shí)際上就是一個(gè)主服務(wù)器的客戶端進(jìn)程),連接到主服務(wù)器上面請(qǐng)求讀取二進(jìn)制日志,然后把讀取到的二進(jìn)制日志寫到本地的一個(gè)Realy log里面。從服務(wù)器上面開啟一個(gè)SQL thread定時(shí)檢查Realy log,如果發(fā)現(xiàn)有更改立即把更改的內(nèi)容在本機(jī)上面執(zhí)行一遍。

2.主從從(master-slave-slave)
一主多從的話,這時(shí)主庫既要負(fù)責(zé)寫又要負(fù)責(zé)為幾個(gè)從庫提供二進(jìn)制日志。此時(shí)可以稍做調(diào)整,將二進(jìn)制日志只給某一從,這一從再開啟二進(jìn)制日志并將自己的二進(jìn)制日志再發(fā)給其它從?;蛘呤歉纱噙@個(gè)從不記錄只負(fù)責(zé)將二進(jìn)制日志轉(zhuǎn)發(fā)給其它從,這樣架構(gòu)起來性能可能要好得多,而且數(shù)據(jù)之間的延時(shí)應(yīng)該也稍微要好一些。
新聞熱點(diǎn)
疑難解答
圖片精選