Mysql 面試總結(jié)

Mysql的存儲引擎

1.InnoDB存儲引擎:InnoDB存儲引擎支持事務(wù)针饥,其設(shè)計(jì)目標(biāo)主要面向在線事務(wù)處理(OLTP)的應(yīng)用凌摄。其特點(diǎn)是行鎖設(shè)計(jì),支持外鍵评架,并支持非鎖定鎖眷茁,即默認(rèn)讀取操作不會產(chǎn)生鎖。從Mysql5.5.8版本開始纵诞,InnoDB存儲引擎是默認(rèn)的存儲引擎蔼卡。

2.MyISAM存儲引擎:MyISAM存儲引擎不支持事務(wù)、表鎖設(shè)計(jì)挣磨,支持全文索引雇逞,主要面向一些OLAP數(shù)據(jù)庫應(yīng)用。InnoDB的數(shù)據(jù)文件本身就是主索引文件茁裙,而MyISAM的主索引和數(shù)據(jù)是分開的塘砸。

3.NDB存儲引擎:NDB存儲引擎是一個(gè)集群存儲引擎,其結(jié)構(gòu)是share nothing的集群架構(gòu)晤锥,能提供更高的可用性掉蔬。NDB的特點(diǎn)是數(shù)據(jù)全部放在內(nèi)存中(從MySQL 5.1版本開始廊宪,可以將非索引數(shù)據(jù)放在磁盤上),因此主鍵查找的速度極快女轿,并且通過添加NDB數(shù)據(jù)存儲節(jié)點(diǎn)可以線性地提高數(shù)據(jù)庫性能箭启,是高可用、高性能的集群系統(tǒng)蛉迹。NDB存儲引擎的連接操作是在MySQL數(shù)據(jù)庫層完成的傅寡,而不是在存儲引擎層完成的。這意味著北救,復(fù)雜的連接操作需要巨大的網(wǎng)絡(luò)開銷荐操,因此查詢速度很慢。如果解決了這個(gè)問題珍策,NDB存儲引擎的市場應(yīng)該是非常巨大的托启。

4.Memory存儲引擎:Memory存儲引擎(之前稱HEAP存儲引擎)將表中的數(shù)據(jù)存放在內(nèi)存中,如果數(shù)據(jù)庫重啟或發(fā)生崩潰攘宙,表中的數(shù)據(jù)都將消失屯耸。它非常適合用于存儲臨時(shí)數(shù)據(jù)的臨時(shí)表,以及數(shù)據(jù)倉庫中的緯度表蹭劈。Memory存儲引擎默認(rèn)使用哈希索引肩民,而不是我們熟悉的B+樹索引。雖然Memory存儲引擎速度非沉捶剑快,但在使用上還是有一定的限制灶搜。比如祟蚀,只支持表鎖,并發(fā)性能較差割卖,并且不支持TEXT和BLOB列類型前酿。最重要的是,存儲變長字段時(shí)是按照定常字段的方式進(jìn)行的鹏溯,因此會浪費(fèi)內(nèi)存罢维。

5.Archive存儲引擎:Archive存儲引擎只支持INSERT和SELECT操作,從MySQL 5.1開始支持索引丙挽。Archive存儲引擎使用zlib算法將數(shù)據(jù)行(row)進(jìn)行壓縮后存儲肺孵,壓縮比一般可達(dá)1∶10。正如其名字所示颜阐,Archive存儲引擎非常適合存儲歸檔數(shù)據(jù)平窘,如日志信息。Archive存儲引擎使用行鎖來實(shí)現(xiàn)高并發(fā)的插入操作凳怨,但是其本身并不是事務(wù)安全的存儲引擎瑰艘,其設(shè)計(jì)目標(biāo)主要是提供高速的插入和壓縮功能是鬼。

6.Maria存儲引擎:Maria存儲引擎是新開發(fā)的引擎,設(shè)計(jì)目標(biāo)主要是用來取代原有的MyISAM存儲引擎紫新,從而成為MySQL的默認(rèn)存儲引擎均蜜。它可以看做是MyISAM的后續(xù)版本。Maria存儲引擎的特點(diǎn)是:支持緩存數(shù)據(jù)和索引文件芒率,應(yīng)用了行鎖設(shè)計(jì)囤耳,提供了MVCC功能,支持事務(wù)和非事務(wù)安全的選項(xiàng)敲董,以及更好的BLOB字符類型的處理性能秽荤。



事務(wù)的基本要素

原子性: 事務(wù)是最小的執(zhí)行單位州邢,不允許分割。事務(wù)的原子性確保動(dòng)作要么全部完成,要么完全不起作用姜凄;

一致性: 執(zhí)行事務(wù)前后,數(shù)據(jù)保持一致诈泼,多個(gè)事務(wù)對同一個(gè)數(shù)據(jù)讀取的結(jié)果是相同的循榆;

隔離性: 并發(fā)訪問數(shù)據(jù)庫時(shí),一個(gè)用戶的事務(wù)不被其他事務(wù)所干擾查刻,各并發(fā)事務(wù)之間數(shù)據(jù)庫是獨(dú)立的键兜;

持久性: 一個(gè)事務(wù)被提交之后。它對數(shù)據(jù)庫中數(shù)據(jù)的改變是持久的穗泵,即使數(shù)據(jù)庫發(fā)生故障也不應(yīng)該對其有任何影響普气。


什么是臟讀?幻讀佃延?不可重復(fù)讀现诀?

臟讀(Drity Read):某個(gè)事務(wù)已更新一份數(shù)據(jù),另一個(gè)事務(wù)在此時(shí)讀取了同一份數(shù)據(jù)履肃,由于某些原因仔沿,前一個(gè)RollBack了操作,則后一個(gè)事務(wù)所讀取的數(shù)據(jù)就會是不正確的尺棋。

不可重復(fù)讀(Non-repeatable read):在一個(gè)事務(wù)的兩次查詢之中數(shù)據(jù)不一致封锉,這可能是兩次查詢過程中間插入了一個(gè)事務(wù)更新的原有的數(shù)據(jù)。

幻讀(Phantom Read):在一個(gè)事務(wù)的兩次查詢中數(shù)據(jù)筆數(shù)不一致膘螟,例如有一個(gè)事務(wù)查詢了幾列(Row)數(shù)據(jù)成福,而另一個(gè)事務(wù)卻在此時(shí)插入了新的幾列數(shù)據(jù),先前的事務(wù)在接下來的查詢中荆残,就會發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的闷叉。



事務(wù)隔離級別(必考)

READ-UNCOMMITTED(讀取未提交): 最低的隔離級別,允許讀取尚未提交的數(shù)據(jù)變更脊阴,可能會導(dǎo)致臟讀握侧、幻讀或不可重復(fù)讀蚯瞧。

READ-COMMITTED(讀取已提交): 允許讀取并發(fā)事務(wù)已經(jīng)提交的數(shù)據(jù),可以阻止臟讀品擎,但是幻讀或不可重復(fù)讀仍有可能發(fā)生埋合。

REPEATABLE-READ(可重復(fù)讀): 對同一字段的多次讀取結(jié)果都是一致的,除非數(shù)據(jù)是被本身事務(wù)自己所修改萄传,可以阻止臟讀和不可重復(fù)讀甚颂,但幻讀仍有可能發(fā)生。

SERIALIZABLE(可串行化): 最高的隔離級別秀菱,完全服從ACID的隔離級別振诬。所有的事務(wù)依次逐個(gè)執(zhí)行,這樣事務(wù)之間就完全不可能產(chǎn)生干擾衍菱,也就是說赶么,該級別可以防止臟讀、不可重復(fù)讀以及幻讀脊串。


SQL執(zhí)行順序

SQL的執(zhí)行順序:from---where--group by---having---select---order by


為什么選擇B+樹作為索引結(jié)構(gòu)(必考)

Hash索引:Hash索引底層是哈希表辫呻,哈希表是一種以key-value存儲數(shù)據(jù)的結(jié)構(gòu),所以多個(gè)數(shù)據(jù)在存儲關(guān)系上是完全沒有任何順序關(guān)系的琼锋,所以放闺,對于區(qū)間查詢是無法直接通過索引查詢的,就需要全表掃描缕坎。所以怖侦,哈希索引只適用于等值查詢的場景。而B+ 樹是一種多路平衡查詢樹谜叹,所以他的節(jié)點(diǎn)是天然有序的(左子節(jié)點(diǎn)小于父節(jié)點(diǎn)匾寝、父節(jié)點(diǎn)小于右子節(jié)點(diǎn)),所以對于范圍查詢的時(shí)候不需要做全表掃描

二叉查找樹:解決了排序的基本問題叉谜,但是由于無法保證平衡,可能退化為鏈表踩萎。

平衡二叉樹:通過旋轉(zhuǎn)解決了平衡的問題停局,但是旋轉(zhuǎn)操作效率太低。

紅黑樹:通過舍棄嚴(yán)格的平衡和引入紅黑節(jié)點(diǎn)香府,解決了 AVL旋轉(zhuǎn)效率過低的問題董栽,但是在磁盤等場景下,樹仍然太高企孩,IO次數(shù)太多锭碳。

B+樹:在B樹的基礎(chǔ)上,將非葉節(jié)點(diǎn)改造為不存儲數(shù)據(jù)純索引節(jié)點(diǎn)勿璃,進(jìn)一步降低了樹的高度擒抛;此外將葉節(jié)點(diǎn)使用指針連接成鏈表推汽,范圍查詢更加高效。



索引B+樹的葉子節(jié)點(diǎn)都可以存哪些東西(必考)

可能存儲的是整行數(shù)據(jù)歧沪,也有可能是主鍵的值歹撒。B+樹的葉子節(jié)點(diǎn)存儲了整行數(shù)據(jù)的是主鍵索引,也被稱之為聚簇索引诊胞。而索引B+ Tree的葉子節(jié)點(diǎn)存儲了主鍵的值的是非主鍵索引暖夭,也被稱之為非聚簇索引



?查詢在什么時(shí)候不走(預(yù)期中的)索引(必考)

1.模糊查詢 %like

2.索引列參與計(jì)算,使用了函數(shù)

3.非最左前綴順序

4.where單列索引對null判斷

5.where不等于

6.or操作有至少一個(gè)字段沒有索引

7.需要回表的查詢結(jié)果集過大(超過配置的范圍)


覆蓋索引

指一個(gè)查詢語句的執(zhí)行只用從索引中就能夠取得,不必從數(shù)據(jù)表中讀取撵孤。也可以稱之為實(shí)現(xiàn)了索引覆蓋迈着。


為什么Mysql數(shù)據(jù)庫存儲不建議使用NULL

1. NOT IN子查詢在有NULL值的情況下返回永遠(yuǎn)為空結(jié)果,查詢?nèi)菀壮鲥e(cuò)邪码。

2. 索引問題裕菠,單列索引無法存儲NULL值,where對null判斷會不走索引霞扬。

3. 如果在兩個(gè)字段進(jìn)行拼接(CONCAT函數(shù))糕韧,首先要各字段進(jìn)行非null判斷,否則只要任意一個(gè)字段為空都會造成拼接的結(jié)果為null

4. 如果有 Null column 存在的情況下喻圃,count(Null column)需要格外注意萤彩,null 值不會參與統(tǒng)計(jì)。

5. Null列需要更多的存儲空間:需要一個(gè)額外的字節(jié)作為判斷是否為NULL的標(biāo)志位



sql如何優(yōu)化

創(chuàng)建并使用正確的索引

只返回需要的字段

減少交互次數(shù)(批量提交)

設(shè)置合理的Fetch Size(數(shù)據(jù)每次返回給客戶端的條數(shù))



explain命令概要

1.id:select選擇標(biāo)識符

2.select_type:表示查詢的類型斧拍。

3.table:輸出結(jié)果集的表

4.partitions:匹配的分區(qū)

5.type:表示表的連接類型

6.possible_keys:表示查詢時(shí)雀扶,可能使用的索引

7.key:表示實(shí)際使用的索引

8.key_len:索引字段的長度

9.ref:列與索引的比較

10.rows:掃描出的行數(shù)(估算的行數(shù))

11.filtered:按表?xiàng)l件過濾的行百分比

12.Extra:執(zhí)行情況的描述和說明


explain 中的 select_type(查詢的類型)

1.SIMPLE(簡單SELECT,不使用UNION或子查詢等)

2.PRIMARY(子查詢中最外層查詢肆汹,查詢中若包含任何復(fù)雜的子部分愚墓,最外層的select被標(biāo)記為PRIMARY)

3.UNION(UNION中的第二個(gè)或后面的SELECT語句)

4.DEPENDENT UNION(UNION中的第二個(gè)或后面的SELECT語句,取決于外面的查詢)

5.UNION RESULT(UNION的結(jié)果昂勉,union語句中第二個(gè)select開始后面所有select)

6.SUBQUERY(子查詢中的第一個(gè)SELECT浪册,結(jié)果不依賴于外部查詢)

7.DEPENDENT SUBQUERY(子查詢中的第一個(gè)SELECT,依賴于外部查詢)

8.DERIVED(派生表的SELECT, FROM子句的子查詢)

9.UNCACHEABLE SUBQUERY(一個(gè)子查詢的結(jié)果不能被緩存岗照,必須重新評估外鏈接的第一行)



explain 中的 type(表的連接類型)

1. system:最快村象,主鍵或唯一索引查找常量值,只有一條記錄攒至,很少能出現(xiàn)

2. const:PK或者unique上的等值查詢

3. eq_ref:PK或者unique上的join查詢厚者,等值匹配,對于前表的每一行(row)迫吐,后表只有一行命中

4. ref:非唯一索引库菲,等值匹配,可能有多行命中

5. range:索引上的范圍掃描志膀,例如:between/in

6. index:索引上的全集掃描熙宇,例如:InnoDB的count

7. ALL:最慢鳖擒,全表掃描(full table scan)


explain 中的 Extra(執(zhí)行情況的描述和說明)

1. Using where:不用讀取表中所有信息,僅通過索引就可以獲取所需數(shù)據(jù)奇颠,這發(fā)生在對表的全部的請求列都是同一個(gè)索引的部分的時(shí)候败去,表示 mysql服務(wù)器將在存儲引擎檢索行后再進(jìn)行過濾

2. Using temporary:表示MySQL需要使用臨時(shí)表來存儲結(jié)果集,常見于排序和分組查詢烈拒,常見 group by ; order by

3. Using filesort:當(dāng)Query中包含 order by 操作圆裕,而且無法利用索引完成的排序操作稱為“文件排序”

4. Using join buffer:改值強(qiáng)調(diào)了在獲取連接條件時(shí)沒有使用索引,并且需要連接緩沖區(qū)來存儲中間結(jié)果荆几。如果出現(xiàn)了這個(gè)值吓妆,那應(yīng)該注意,根據(jù)查詢的具體情況可能需要添加索引來改進(jìn)能吨铸。

5. Impossible where:這個(gè)值強(qiáng)調(diào)了where語句會導(dǎo)致沒有符合條件的行(通過收集統(tǒng)計(jì)信息不可能存在結(jié)果)行拢。

6. Select tables optimized away:這個(gè)值意味著僅通過使用索引,優(yōu)化器可能僅從聚合函數(shù)結(jié)果中返回一行

7. No tables used:Query語句中使用from dual 或不含任何from子句



binlog,redolog,undolog都是什么诞吱,起什么作用

1.undoLog 也就是我們常說的回滾日志文件 主要用于事務(wù)中執(zhí)行失敗舟奠,進(jìn)行回滾,以及MVCC中對于數(shù)據(jù)歷史版本的查看房维。由引擎層的InnoDB引擎實(shí)現(xiàn),是邏輯日志,記錄數(shù)據(jù)修改被修改前的值,比如"把id='B' 修改為id = 'B2' 沼瘫,那么undo日志就會用來存放id ='B'的記錄”。當(dāng)一條數(shù)據(jù)需要更新前,會先把修改前的記錄存儲在undolog中,如果這個(gè)修改出現(xiàn)異常,,則會使用undo日志來實(shí)現(xiàn)回滾操作,保證事務(wù)的一致性咙俩。當(dāng)事務(wù)提交之后耿戚,undo log并不能立馬被刪除,而是會被放到待清理鏈表中,待判斷沒有事物用到該版本的信息時(shí)才可以清理相應(yīng)undolog。它保存了事務(wù)發(fā)生之前的數(shù)據(jù)的一個(gè)版本阿趁,用于回滾膜蛔,同時(shí)可以提供多版本并發(fā)控制下的讀(MVCC),也即非鎖定讀脖阵。

2.redoLog 是重做日志文件是記錄數(shù)據(jù)修改之后的值皂股,用于持久化到磁盤中。redo log包括兩部分:一是內(nèi)存中的日志緩沖(redo log buffer)命黔,該部分日志是易失性的呜呐;二是磁盤上的重做日志文件(redo log file),該部分日志是持久的纷铣。由引擎層的InnoDB引擎實(shí)現(xiàn),是物理日志,記錄的是物理數(shù)據(jù)頁修改的信息,比如“某個(gè)數(shù)據(jù)頁上內(nèi)容發(fā)生了哪些改動(dòng)”卵史。當(dāng)一條數(shù)據(jù)需要更新時(shí),InnoDB會先將數(shù)據(jù)更新战转,然后記錄redoLog 在內(nèi)存中搜立,然后找個(gè)時(shí)間將redoLog的操作執(zhí)行到磁盤上的文件上。不管是否提交成功我都記錄槐秧,你要是回滾了啄踊,那我連回滾的修改也記錄忧设。它確保了事務(wù)的持久性。每個(gè)InnoDB存儲引擎至少有1個(gè)重做日志文件組(group)颠通,每個(gè)文件組下至少有2個(gè)重做日志文件址晕,如默認(rèn)的ib_logfile0和ib_logfile1。為了得到更高的可靠性顿锰,用戶可以設(shè)置多個(gè)的鏡像日志組(mirrored log groups)谨垃,將不同的文件組放在不同的磁盤上,以此提高重做日志的高可用性硼控。在日志組中每個(gè)重做日志文件的大小一致刘陶,并以循環(huán)寫入的方式運(yùn)行。InnoDB存儲引擎先寫重做日志文件1牢撼,當(dāng)達(dá)到文件的最后時(shí)匙隔,會切換至重做日志文件2,再當(dāng)重做日志文件2也被寫滿時(shí)熏版,會再切換到重做日志文件1中纷责。

3.MVCC多版本并發(fā)控制是MySQL中基于樂觀鎖理論實(shí)現(xiàn)隔離級別的方式,用于讀已提交和可重復(fù)讀取隔離級別的實(shí)現(xiàn)撼短。在MySQL中再膳,會在表中每一條數(shù)據(jù)后面添加兩個(gè)字段:最近修改該行數(shù)據(jù)的事務(wù)ID,指向該行(undolog表中)回滾段的指針阔加。Read View判斷行的可見性饵史,創(chuàng)建一個(gè)新事務(wù)時(shí),copy一份當(dāng)前系統(tǒng)中的活躍事務(wù)列表胜榔。意思是胳喷,當(dāng)前不應(yīng)該被本事務(wù)看到的其他事務(wù)id列表。已提交讀隔離級別下的事務(wù)在每次查詢的開始都會生成一個(gè)獨(dú)立的ReadView,而可重復(fù)讀隔離級別則在第一次讀的時(shí)候生成一個(gè)ReadView夭织,之后的讀都復(fù)用之前的ReadView吭露。



?InnoDB的行鎖/表鎖

共享鎖(S):用法lock in share mode,又稱讀鎖尊惰,允許一個(gè)事務(wù)去讀一行讲竿,阻止其他事務(wù)獲得相同數(shù)據(jù)集的排他鎖。若事務(wù)T對數(shù)據(jù)對象A加上S鎖弄屡,則事務(wù)T可以讀A但不能修改A题禀,其他事務(wù)只能再對A加S鎖,而不能加X鎖膀捷,直到T釋放A上的S鎖迈嘹。這保證了其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改。

排他鎖(X):用法for update秀仲,又稱寫鎖融痛,允許獲取排他鎖的事務(wù)更新數(shù)據(jù),阻止其他事務(wù)取得相同的數(shù)據(jù)集共享讀鎖和排他寫鎖神僵。若事務(wù)T對數(shù)據(jù)對象A加上X鎖雁刷,事務(wù)T可以讀A也可以修改A,其他事務(wù)不能再對A加任何鎖保礼,直到T釋放A上的鎖沛励。在沒有索引的情況下,InnoDB只能使用表鎖炮障。


什么是死鎖侯勉?怎么解決?

死鎖是指兩個(gè)或多個(gè)事務(wù)在同一資源上相互占用铝阐,并請求鎖定對方的資源址貌,從而導(dǎo)致惡性循環(huán)的現(xiàn)象。

常見的解決死鎖的方法

1徘键、如果不同程序會并發(fā)存取多個(gè)表练对,盡量約定以相同的順序訪問表,可以大大降低死鎖機(jī)會吹害。

2螟凭、在同一個(gè)事務(wù)中,盡可能做到一次鎖定所需要的所有資源它呀,減少死鎖產(chǎn)生概率螺男;

3、對于非常容易產(chǎn)生死鎖的業(yè)務(wù)部分纵穿,可以嘗試使用升級鎖定顆粒度下隧,通過表級鎖定來減少死鎖產(chǎn)生的概率;

如果業(yè)務(wù)處理不好可以用分布式事務(wù)鎖或者使用樂觀鎖


數(shù)據(jù)庫的樂觀鎖和悲觀鎖是什么谓媒?怎么實(shí)現(xiàn)的淆院?

數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的并發(fā)控制的任務(wù)是確保在多個(gè)事務(wù)同時(shí)存取數(shù)據(jù)庫中同一數(shù)據(jù)時(shí)不破壞事務(wù)的隔離性和統(tǒng)一性以及數(shù)據(jù)庫的統(tǒng)一性。樂觀并發(fā)控制(樂觀鎖)和悲觀并發(fā)控制(悲觀鎖)是并發(fā)控制主要采用的技術(shù)手段句惯。

悲觀鎖:假定會發(fā)生并發(fā)沖突土辩,屏蔽一切可能違反數(shù)據(jù)完整性的操作。在查詢完數(shù)據(jù)的時(shí)候就把事務(wù)鎖起來抢野,直到提交事務(wù)拷淘。實(shí)現(xiàn)方式:使用數(shù)據(jù)庫中的鎖機(jī)制

樂觀鎖:假設(shè)不會發(fā)生并發(fā)沖突,只在提交操作時(shí)檢查是否違反數(shù)據(jù)完整性指孤。在修改數(shù)據(jù)的時(shí)候把事務(wù)鎖起來启涯,通過version的方式來進(jìn)行鎖定。實(shí)現(xiàn)方式:樂一般會使用版本號機(jī)制或CAS算法實(shí)現(xiàn)。

兩種鎖的使用場景

從上面對兩種鎖的介紹逝嚎,我們知道兩種鎖各有優(yōu)缺點(diǎn),不可認(rèn)為一種好于另一種详恼,像樂觀鎖適用于寫比較少的情況下(多讀場景)补君,即沖突真的很少發(fā)生的時(shí)候,這樣可以省去了鎖的開銷昧互,加大了系統(tǒng)的整個(gè)吞吐量挽铁。

但如果是多寫的情況,一般會經(jīng)常產(chǎn)生沖突敞掘,這就會導(dǎo)致上層應(yīng)用會不斷的進(jìn)行retry叽掘,這樣反倒是降低了性能,所以一般多寫的場景下用悲觀鎖就比較合適



Mysql讀寫分離以及主從同步

原理:主庫將變更寫binlog日志玖雁,然后從庫連接到主庫后更扁,從庫有一個(gè)IO線程,將主庫的binlog日志拷貝到自己本地赫冬,寫入一個(gè)中繼日志中浓镜,接著從庫中有一個(gè)sql線程會從中繼日志讀取binlog,然后執(zhí)行binlog日志中的內(nèi)容劲厌,也就是在自己本地再執(zhí)行一遍sql膛薛,這樣就可以保證自己跟主庫的數(shù)據(jù)一致。

問題:這里有很重要一點(diǎn)补鼻,就是從庫同步主庫數(shù)據(jù)的過程是串行化的哄啄,也就是說主庫上并行操作,在從庫上會串行化執(zhí)行风范,由于從庫從主庫拷貝日志以及串行化執(zhí)行sql特點(diǎn)咨跌,在高并發(fā)情況下,從庫數(shù)據(jù)一定比主庫慢一點(diǎn)硼婿,是有延時(shí)的虑润,所以經(jīng)常出現(xiàn),剛寫入主庫的數(shù)據(jù)可能讀不到了加酵,要過幾十毫秒拳喻,甚至幾百毫秒才能讀取到。還有一個(gè)問題猪腕,如果突然主庫宕機(jī)了冗澈,然后恰巧數(shù)據(jù)還沒有同步到從庫,那么有些數(shù)據(jù)可能在從庫上是沒有的陋葡,有些數(shù)據(jù)可能就丟失了亚亲。所以mysql實(shí)際上有兩個(gè)機(jī)制,一個(gè)是半同步復(fù)制,用來解決主庫數(shù)據(jù)丟失問題捌归,一個(gè)是并行復(fù)制肛响,用來解決主從同步延時(shí)問題。

半同步復(fù)制:semi-sync復(fù)制惜索,指的就是主庫寫入binlog日志后特笋,就會將強(qiáng)制此時(shí)立即將數(shù)據(jù)同步到從庫,從庫將日志寫入自己本地的relay log之后巾兆,接著會返回一個(gè)ack給主庫猎物,主庫接收到至少一個(gè)從庫ack之后才會認(rèn)為寫完成。

并發(fā)復(fù)制:指的是從庫開啟多個(gè)線程角塑,并行讀取relay log中不同庫的日志蔫磨,然后并行重放不同庫的日志,這樣庫級別的并行圃伶。(將主庫分庫也可緩解延遲問題)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堤如,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子窒朋,更是在濱河造成了極大的恐慌煤惩,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炼邀,死亡現(xiàn)場離奇詭異魄揉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拭宁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門洛退,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杰标,你說我怎么就攤上這事兵怯。” “怎么了腔剂?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵媒区,是天一觀的道長。 經(jīng)常有香客問我掸犬,道長袜漩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任湾碎,我火速辦了婚禮宙攻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘介褥。我一直安慰自己座掘,他們只是感情好递惋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溢陪,像睡著了一般萍虽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上形真,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天杉编,我揣著相機(jī)與錄音,去河邊找鬼没酣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛卵迂,可吹牛的內(nèi)容都是我干的裕便。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼见咒,長吁一口氣:“原來是場噩夢啊……” “哼偿衰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起改览,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤下翎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宝当,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體视事,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年庆揩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俐东。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡订晌,死狀恐怖虏辫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锈拨,我是刑警寧澤砌庄,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站奕枢,受9級特大地震影響娄昆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缝彬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一稿黄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧跌造,春花似錦杆怕、人聲如沸族购。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寝杖。三九已至,卻和暖如春互纯,著一層夾襖步出監(jiān)牢的瞬間瑟幕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工留潦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留只盹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓兔院,卻偏偏與公主長得像殖卑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子坊萝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容