mysql主從復(fù)制主庫宕機(jī) MySQL主從復(fù)制能完美解決數(shù)據(jù)庫的單點(diǎn)問題嗎?為什么?
MySQL主從復(fù)制能完美解決數(shù)據(jù)庫的單點(diǎn)問題嗎?為什么?使用主從時(shí),實(shí)際上放棄了強(qiáng)一致性。由于受試者只問一個(gè)問題,我們不考慮訪問次數(shù)的問題。換句話說,假設(shè)主從復(fù)制可以完全支持當(dāng)前的系統(tǒng)訪問。)通用數(shù)據(jù)
MySQL主從復(fù)制能完美解決數(shù)據(jù)庫的單點(diǎn)問題嗎?為什么?
使用主從時(shí),實(shí)際上放棄了強(qiáng)一致性。由于受試者只問一個(gè)問題,我們不考慮訪問次數(shù)的問題。換句話說,假設(shè)主從復(fù)制可以完全支持當(dāng)前的系統(tǒng)訪問。)
通用數(shù)據(jù)庫主從設(shè)置:
主數(shù)據(jù)庫可以讀寫
即系統(tǒng)可以同時(shí)從主數(shù)據(jù)庫和從數(shù)據(jù)庫獲取數(shù)據(jù)。數(shù)據(jù)寫入主庫后,會(huì)自動(dòng)同步到從庫。
這構(gòu)成了一個(gè)簡單的分布式系統(tǒng)。根據(jù)cap定理,三個(gè)中只能選擇一個(gè)。如果一致性很強(qiáng),則不會(huì)提高系統(tǒng)的可用性,反而會(huì)降低系統(tǒng)的可用性。
讓我們看看上面的主從結(jié)構(gòu)中可能出現(xiàn)什么問題:
系統(tǒng)寫入主數(shù)據(jù)庫,然后從主數(shù)據(jù)庫進(jìn)行查詢。這是一個(gè)單點(diǎn)數(shù)據(jù)庫,沒有影響。
-如果數(shù)據(jù)已同步,則沒有影響
-如果數(shù)據(jù)未同步,則會(huì)查詢舊數(shù)據(jù)
-如果同步有問題,則會(huì)斷開主設(shè)備和從設(shè)備的連接。如果系統(tǒng)無法感知它,那么查詢可能總是舊數(shù)據(jù)。這里我們需要監(jiān)視同步。當(dāng)同步出現(xiàn)問題時(shí),我們應(yīng)該及時(shí)處理
掛斷庫。主數(shù)據(jù)不能與從數(shù)據(jù)同步。如果主從交換機(jī)是自動(dòng)的,單點(diǎn)故障的概率只會(huì)降低50%(如果主數(shù)據(jù)庫或備用數(shù)據(jù)庫發(fā)生故障,并且沒有人恢復(fù))。
使用MySQLProxy解決MySQL主從同步延遲?
1. 從庫太多導(dǎo)致復(fù)制延遲
優(yōu)化:建議3-5個(gè)從庫
2。從庫的硬件性能比主庫差
優(yōu)化:提高硬件性能
3。太多慢的SQL語句
優(yōu)化:SQL語句執(zhí)行時(shí)間太長,需要對SQL語句進(jìn)行優(yōu)化
4。主從復(fù)制設(shè)計(jì)問題
優(yōu)化:主從復(fù)制是單線程的,可以通過多線程IO解決;另外MySQL5.6.3支持多線程IO復(fù)制。
5. 主從庫之間的網(wǎng)絡(luò)延遲
優(yōu)化:盡量縮短鏈路,提高端口帶寬
6。主庫讀寫壓力大
優(yōu)化:在前端添加緩沖區(qū)和緩存。異步主從延遲:不管有多大的延遲,只要不影響業(yè)務(wù),都可以
7。業(yè)務(wù)設(shè)計(jì)缺陷導(dǎo)致延遲并影響業(yè)務(wù)
優(yōu)化:從數(shù)據(jù)庫中沒有數(shù)據(jù)讀取主數(shù)據(jù)庫
主從復(fù)制有兩個(gè)線程,SQL和Io。前者負(fù)責(zé)SQL的復(fù)制,后者負(fù)責(zé)編寫。因此,從兩個(gè)方面來看,當(dāng)網(wǎng)絡(luò)較差,或者帶寬有限,或者主CPU太忙,跟不上binlog傳輸速度,或者從機(jī)IO性能較差時(shí),很容易造成主從復(fù)制延遲。從show slave status的一些參數(shù)可以看出,大約在master后面XX個(gè)左右,實(shí)際上MySQL的主從問題很大,設(shè)計(jì)比較低。我至少三年沒有關(guān)注MySQL了。我不知道這方面有沒有改進(jìn)。