文章很長,且持續更新,建議收藏起來,慢慢讀!瘋狂創客圈總目錄 博客園版 爲您奉上珍貴的學習資源 :
免費贈送 :《尼恩Java面試寶典》 持續更新+ 史上最全 + 面試必備 2000頁+ 面試必備 + 大廠必備 +漲薪必備
免費贈送 :《尼恩技術聖經+高併發系列PDF》 ,幫你 實現技術自由,完成職業升級, 薪酬猛漲!加尼恩免費領
免費贈送 經典圖書:《Java高併發核心編程(卷1)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 經典圖書:《Java高併發核心編程(卷2)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 經典圖書:《Java高併發核心編程(卷3)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 資源寶庫: Java 必備 百度網盤資源大合集 價值>10000元 加尼恩領取
滴滴一面:MySQL主從複製不一致,主要原因是?
說在前面
在40歲老架構師 尼恩的讀者交流羣(50+)中,最近有小夥伴拿到了一線互聯網企業如滴滴、極兔、有贊、希音、百度、網易的面試資格,遇到很多很重要的面試題:
什麼情況下MySQL主從複製會出現不一致?
如何預防及解決MySQL主從複製不一致?
所以,這裏尼恩給大家做一下系統化、體系化的梳理,使得大家可以充分展示一下大家雄厚的 “技術肌肉”,讓面試官愛到 “不能自已、口水直流”。
也一併把這個題目以及參考答案,收入咱們的 《尼恩Java面試寶典PDF》V111版本,供後面的小夥伴參考,提升大家的 3高 架構、設計、開發水平。
最新《尼恩 架構筆記》《尼恩高併發三部曲》《尼恩Java面試寶典》的PDF,請關注本公衆號【技術自由圈】獲取,後臺回覆:領電子書
一、什麼原因會造成MySQL主從複製不一致
導致主從不一致的原因主要有:
1、人爲原因導致從庫與主庫數據不一致(從庫寫入)
2、主從複製過程中,主庫異常宕機
3、設置了ignore/do/rewrite等replication等規則
4、binlog非row格式
5、異步複製本身不保證,半同步存在提交讀的問題,增強半同步起來比較完美。 但對於異常重啓(Replication Crash Safe),從庫寫數據(GTID)的防範,還需要策略來保證。
6、從庫中斷很久,binlog應用不連續,監控並及時修復主從
7、從庫啓用了諸如存儲過程,從庫禁用存儲過程等
8、數據庫大小版本/分支版本導致數據不一致?,主從版本統一
9、備份的時候沒有指定參數 例如mysqldump --master-data=2 等
10、主從sql_mode 不一致
11、一主二從環境,二從的server id一致
12、MySQL自增列 主從不一致
13、主從信息保存在文件裏面,文件本身的刷新是非事務的,導致從庫重啓後開始執行點大於實際執行點
14、採用5.6的after_commit方式半同步,主庫當機可能會引起主從不一致,要看binlog是否傳到了從庫
15、啓用增強半同步了(5.7的after_sync方式),但是從庫延遲超時自動切換成異步複製
二、如何預防及解決?
預防和解決的方案有:
1、master:innodb_flush_log_at_trx_commit=1&sync_binlog=1
2、slave:master_info_repository=“TABLE”&relay_log_info_repository=“TABLE”&relay_log_recovery=1
3、設置從庫庫爲只讀模式
4、可以使用5.7增強半同步避免數據丟失等
5、binlog row格式
6、必須引定期的數據校驗機制
7、當使用延遲複製的時候,此時主從數據也是不一致的(計劃內),但在切換中,不要把延遲從提升爲主庫哦~
8、mha在主從切換的過程中,因主庫系統宕機,可能造成主從不一致(mha本身機制導致這個問題)
三、MySQL 5.7的複製架構,在有異步複製、半同步、增強半同步、MGR等的生產中,該如何選擇?
(一)生產環境中
幾種複製場景都有存在的價值。下面分別描述一下:
1.從成熟度上來選擇,推薦:異步複製(GTID+ROW)
2.從數據安全及更高性能上選擇:增強半同步 (在這個結構下也可以把innodb_flush_log_trx_commit調整到非1, 從而獲得更好的性能)
3.對於主從切換控制覺的不好管理,又對數據一致性要求特別高的場景,可以使用MGR
(二)理由
1.異步複製,相對來講非常成熟,對於環境運維也比較容易上手
2.增強半同步複製,可以安全的保證數據傳輸到從庫上,對於單節點的配置上不用要求太嚴格,特別從庫上也可以更寬鬆一點,而且在一致性和性能有較高的提升,但對運維上有一定的要求
3.MGR組複製。相對增強半同步複製,MGR更能確保數據的一致性,事務的提交,必須經過組內大多數節點(n/2+1)決議並通過,才能得以提交。MGR架構對運維難度要更高,不過它也更完美
總的來講,從技術實現上來看:MGR> 增強半同步>異步複製。
說在最後
MySQL 相關面試題,是非常常見的面試題。
以上的內容,如果大家能對答如流,如數家珍,基本上 面試官會被你 震驚到、吸引到。
在面試之前,建議大家系統化的刷一波 5000頁《尼恩Java面試寶典PDF》,並且在刷題過程中,如果有啥問題,大家可以來 找 40歲老架構師尼恩交流。
最終,讓面試官愛到 “不能自已、口水直流”。offer, 也就來了。
技術自由的實現路徑:
實現你的 架構自由:
《阿里二面:千萬級、億級數據,如何性能優化? 教科書級 答案來了》
《峯值21WQps、億級DAU,小遊戲《羊了個羊》是怎麼架構的?》
… 更多架構文章,正在添加中
實現你的 響應式 自由:
這是老版本 《Flux、Mono、Reactor 實戰(史上最全)》
實現你的 spring cloud 自由:
《Spring cloud Alibaba 學習聖經》 PDF
《分庫分表 Sharding-JDBC 底層原理、核心實戰(史上最全)》
《一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之間混亂關係(史上最全)》
實現你的 linux 自由:
實現你的 網絡 自由:
《網絡三張表:ARP表, MAC表, 路由表,實現你的網絡自由!!》
實現你的 分佈式鎖 自由:
實現你的 王者組件 自由:
《隊列之王: Disruptor 原理、架構、源碼 一文穿透》
《緩存之王:Caffeine 源碼、架構、原理(史上最全,10W字 超級長文)》
《Java Agent 探針、字節碼增強 ByteBuddy(史上最全)》