mysql優(yōu)化的幾種方法 什么情況會(huì)導(dǎo)致MySQL主從復(fù)制延遲?
什么情況會(huì)導(dǎo)致MySQL主從復(fù)制延遲?主從復(fù)制有兩個(gè)線程,SQL和Io。前者負(fù)責(zé)SQL的復(fù)制,后者負(fù)責(zé)編寫(xiě)。因此,從兩個(gè)方面來(lái)看,當(dāng)網(wǎng)絡(luò)較差,或者帶寬有限,或者主CPU太忙,跟不上binlog傳輸速度
什么情況會(huì)導(dǎo)致MySQL主從復(fù)制延遲?
主從復(fù)制有兩個(gè)線程,SQL和Io。前者負(fù)責(zé)SQL的復(fù)制,后者負(fù)責(zé)編寫(xiě)。因此,從兩個(gè)方面來(lái)看,當(dāng)網(wǎng)絡(luò)較差,或者帶寬有限,或者主CPU太忙,跟不上binlog傳輸速度,或者從機(jī)IO性能較差時(shí),很容易造成主從復(fù)制延遲。從show slave status的一些參數(shù)可以看出,大約在master后面XX個(gè)左右,實(shí)際上MySQL的主從問(wèn)題很大,設(shè)計(jì)比較低。我至少三年沒(méi)有關(guān)注MySQL了。我不知道這方面有沒(méi)有改進(jìn)。
MySQL主從數(shù)據(jù)不一致,需要重新關(guān)聯(lián)?
1. 網(wǎng)絡(luò)延遲。由于MySQL主從復(fù)制是基于binlog的異步復(fù)制,binlog文件通過(guò)網(wǎng)絡(luò)傳輸,當(dāng)然網(wǎng)絡(luò)延遲是主從異步的絕大多數(shù)原因,特別是對(duì)于跨機(jī)房的數(shù)據(jù)同步,概率非常大,所以我們應(yīng)該把讀寫(xiě)分開(kāi),從業(yè)務(wù)層面注意初步設(shè)計(jì)。
2. 主從機(jī)負(fù)載不一致。由于MySQL的主從復(fù)制在主數(shù)據(jù)庫(kù)上啟動(dòng)了一個(gè)IO線程,并從上面啟動(dòng)了一個(gè)SQL線程和一個(gè)IO線程,因此任何一臺(tái)機(jī)器的負(fù)載都非常高,而且非常繁忙,導(dǎo)致任何一個(gè)線程的資源都不足,會(huì)出現(xiàn)主從不一致的情況。
3.max u2;允許2;數(shù)據(jù)包設(shè)置與主數(shù)據(jù)庫(kù)上方的最大設(shè)置不一致2;允許2;數(shù)據(jù)包大于從屬數(shù)據(jù)庫(kù)。當(dāng)一個(gè)大的SQL語(yǔ)句可以在master數(shù)據(jù)庫(kù)上執(zhí)行時(shí),slave數(shù)據(jù)庫(kù)上的設(shè)置太小,無(wú)法執(zhí)行,導(dǎo)致master和slave之間的不一致。
4. 主從不一致是由于從密鑰增量開(kāi)始的密鑰值與密鑰增量的步長(zhǎng)不一致造成的。
5. 在MySQL異常宕機(jī)的情況下,如果sync未設(shè)置為Binlog=1或InnoDB flushlogat rxuucommit=1,則可能導(dǎo)致Binlog或relaylog文件損壞,導(dǎo)致主從不一致。
6. MySQL錯(cuò)誤導(dǎo)致的主從異步。