mysql數(shù)據(jù)庫命令大全 MySQL主從復(fù)制能完美解決數(shù)據(jù)庫的單點(diǎn)問題嗎?為什么?
MySQL主從復(fù)制能完美解決數(shù)據(jù)庫的單點(diǎn)問題嗎?為什么?使用主從時,實際上放棄了強(qiáng)一致性。由于受試者只問一個問題,我們不考慮訪問次數(shù)的問題。換句話說,假設(shè)主從復(fù)制可以完全支持當(dāng)前的系統(tǒng)訪問。)通用數(shù)據(jù)
MySQL主從復(fù)制能完美解決數(shù)據(jù)庫的單點(diǎn)問題嗎?為什么?
使用主從時,實際上放棄了強(qiáng)一致性。由于受試者只問一個問題,我們不考慮訪問次數(shù)的問題。換句話說,假設(shè)主從復(fù)制可以完全支持當(dāng)前的系統(tǒng)訪問。)
通用數(shù)據(jù)庫主從設(shè)置:
主數(shù)據(jù)庫可以讀寫
即系統(tǒng)可以同時從主數(shù)據(jù)庫和從數(shù)據(jù)庫獲取數(shù)據(jù)。數(shù)據(jù)寫入主庫后,會自動同步到從庫。
這構(gòu)成了一個簡單的分布式系統(tǒng)。根據(jù)cap定理,三個中只能選擇一個。如果一致性很強(qiáng),則不會提高系統(tǒng)的可用性,反而會降低系統(tǒng)的可用性。
讓我們看看上面的主從結(jié)構(gòu)中可能出現(xiàn)什么問題:
系統(tǒng)寫入主數(shù)據(jù)庫,然后從主數(shù)據(jù)庫進(jìn)行查詢。這是一個單點(diǎn)數(shù)據(jù)庫,沒有影響。
-如果數(shù)據(jù)已同步,則沒有影響
-如果數(shù)據(jù)未同步,則會查詢舊數(shù)據(jù)
-如果同步有問題,則會斷開主設(shè)備和從設(shè)備的連接。如果系統(tǒng)無法感知它,那么查詢可能總是舊數(shù)據(jù)。這里我們需要監(jiān)視同步。當(dāng)同步出現(xiàn)問題時,我們應(yīng)該及時處理
掛斷庫。主數(shù)據(jù)不能與從數(shù)據(jù)同步。如果主從交換機(jī)是自動的,單點(diǎn)故障的概率只會降低50%(如果主數(shù)據(jù)庫或備用數(shù)據(jù)庫發(fā)生故障,并且沒有人恢復(fù))。
mysql如果出現(xiàn)主從數(shù)據(jù)不一致情況怎么弄?
1. 網(wǎng)絡(luò)延遲。由于MySQL主從復(fù)制是基于binlog的異步復(fù)制,binlog文件通過網(wǎng)絡(luò)傳輸,當(dāng)然網(wǎng)絡(luò)延遲是主從異步的絕大多數(shù)原因,特別是對于跨機(jī)房的數(shù)據(jù)同步,概率非常大,所以我們應(yīng)該把讀寫分開,從業(yè)務(wù)層面注意初步設(shè)計。
2. 主從機(jī)負(fù)載不一致。由于MySQL的主從復(fù)制在主數(shù)據(jù)庫上啟動了一個IO線程,并從上面啟動了一個SQL線程和一個IO線程,因此任何一臺機(jī)器的負(fù)載都非常高,而且非常繁忙,導(dǎo)致任何一個線程的資源都不足,會出現(xiàn)主從不一致的情況。
3.max u2;允許2;數(shù)據(jù)包設(shè)置與主數(shù)據(jù)庫上方的最大設(shè)置不一致2;允許2;數(shù)據(jù)包大于從屬數(shù)據(jù)庫。當(dāng)一個大的SQL語句可以在master數(shù)據(jù)庫上執(zhí)行時,slave數(shù)據(jù)庫上的設(shè)置太小,無法執(zhí)行,導(dǎo)致master和slave之間的不一致。
4. 主從不一致是由于從密鑰增量開始的密鑰值與密鑰增量的步長不一致造成的。
5. 在MySQL異常宕機(jī)的情況下,如果sync未設(shè)置為Binlog=1或InnoDB flushlogat rxuucommit=1,則可能導(dǎo)致Binlog或relaylog文件損壞,導(dǎo)致主從不一致。
6. MySQL錯誤導(dǎo)致的主從異步。
7. 版本不一致,特別是高版本為主,低版本從時,從庫不支持主庫支持的功能。
什么情況會導(dǎo)致MySQL主從復(fù)制延遲?
主從復(fù)制有兩個線程,SQL和Io。前者負(fù)責(zé)SQL的復(fù)制,后者負(fù)責(zé)編寫。因此,從兩個方面來看,當(dāng)網(wǎng)絡(luò)較差,或者帶寬有限,或者主CPU太忙,跟不上binlog傳輸速度,或者從機(jī)IO性能較差時,很容易造成主從復(fù)制延遲。從show slave status的一些參數(shù)可以看出,大約在master后面XX個左右,實際上MySQL的主從問題很大,設(shè)計比較低。我至少三年沒有關(guān)注MySQL了。我不知道這方面有沒有改進(jìn)。