前言
作為最流行的開源數(shù)據(jù)庫軟件之一许溅,MySQL數(shù)據(jù)庫軟件已經(jīng)廣為人知了嚼隘。當前很火的Facebook、騰訊辜膝、淘寶等大型網(wǎng)站都在使用MySQL的數(shù)據(jù)庫无牵。
互聯(lián)網(wǎng)行業(yè)的多數(shù)業(yè)務場景有非常明顯的特點:用戶量大、引發(fā)數(shù)據(jù)容量大厂抖、并發(fā)高茎毁、業(yè)務復雜度適中。MySQL數(shù)據(jù)庫產(chǎn)品初期的定位就是Web應用的數(shù)據(jù)服務忱辅,故幾乎所有互聯(lián)網(wǎng)企業(yè)都使用MySQL數(shù)據(jù)庫產(chǎn)品七蜘,有很多企業(yè)幾乎全部使用MySQL提供的數(shù)據(jù)服務。
選擇開源產(chǎn)品是國家和企業(yè)的主流選擇墙懂,而開源MySQL數(shù)據(jù)庫在國內(nèi)外應用最廣泛橡卤,從業(yè)的技術人員也最多,它成為“去IOE”分布式技術架構中最關鍵的關系型數(shù)據(jù)庫產(chǎn)品损搬。數(shù)據(jù)庫系統(tǒng)作為IT業(yè)務系統(tǒng)的核心碧库,其高可用性和容災能力對整個業(yè)務系統(tǒng)的連續(xù)性和數(shù)據(jù)完整性起著至關重要的作用柜与,是企業(yè)正常運營的基石。
互聯(lián)網(wǎng)公司里面幾乎很少有公司不用MySQL嵌灰,國內(nèi)互聯(lián)網(wǎng)巨頭都在大規(guī)模使用MySQL弄匕。如果把MySQL比喻成數(shù)據(jù)庫界的一條巨龍,則性能優(yōu)化和高可用架構設計實踐就是點睛之筆沽瞭。
本文將詳細講解MySQL 5.7高可用和性能優(yōu)化技術粘茄,細致梳理思路,并與真實生產(chǎn)案例相結(jié)合秕脓,通過原理闡述到實戰(zhàn)部署柒瓣,幫助讀者將所學知識點運用到實際工作中。
相關知識資料移步主頁簡介
本文適合有一定基礎的MySQL數(shù)據(jù)庫學習者吠架、MySQL數(shù)據(jù)庫開發(fā)人員和MySQL數(shù)據(jù)庫管理人員閱讀芙贫。
目錄
主要內(nèi)容
第1章MySQL架構介紹;MySQL作為目前互聯(lián)網(wǎng)工作的主流數(shù)據(jù)庫傍药,有著不容撼動的地位磺平。DB-Engines這個排名在業(yè)界引用得非常多,權威性也很高拐辽,排名前三依然是Oracle拣挪、MySQL、Microsoft SQL Server俱诸。MySQL是20世紀90年代出來的數(shù)據(jù)庫菠劝,整個架構上吸取了其他數(shù)據(jù)庫的一些優(yōu)良特性,也去除了不好的地方睁搭,整個架構比較穩(wěn)定赶诊、比較簡潔。MySQL的架構可以在多種不同的場景中應用园骆,F(xiàn)acebook舔痪、Twitter、Google锌唾、騰訊锄码、阿里等都在大量使用MySQL存儲海量數(shù)據(jù)。
第2章lnnoDB存儲引擎體系結(jié)構晌涕;從MySQL 5.5版本開始滋捶,InnoDB是默認的表存儲引擎,特點是支持事務渐排、支持數(shù)據(jù)行鎖炬太、支持多版本并發(fā)MVCC、支持外鍵驯耻。
第3章MySQL事務和鎖亲族;鎖在計算機中是協(xié)調(diào)多個進程或線程并發(fā)訪問某一資源的一種機制炒考。在數(shù)據(jù)庫中,除了傳統(tǒng)的計算資源(CPU霎迫、RAM斋枢、I/O等)爭用之外,數(shù)據(jù)也是一種供許多用戶共享訪問的資源知给。數(shù)據(jù)庫在進行并發(fā)訪問的時候會自動對相應的對象進行加鎖瓤帚,以保證數(shù)據(jù)并發(fā)訪問的一致性。InnoDB存儲引擎既支持行級鎖涩赢,也支持表級鎖戈次,但默認情況下采用行級鎖。
第4章SQL語句性能優(yōu)化筒扒;說起SQL語句性能優(yōu)化怯邪,相信所有人都了解一些簡單的技巧:不使用SELECT *、不使用NULL字段花墩、合理地使用索引悬秉、為字段選擇恰當?shù)臄?shù)據(jù)類型等。你是否真的理解這些優(yōu)化技巧冰蘑?是否理解其背后的工作原理和泌?本章從理論和實戰(zhàn)角度出發(fā),講解這些優(yōu)化建議背后的原理祠肥。
第5章MySQL服務器全面優(yōu)化武氓;絕大多數(shù)使用Linux操作系統(tǒng)的大中型互聯(lián)網(wǎng)網(wǎng)站都在使用MySQL作為后端的數(shù)據(jù)庫服務,所以如何優(yōu)化MySQL服務器是我們要研究的√赂蹋現(xiàn)在MySQL 5.7版本對于多核CPU聋丝、固態(tài)硬盤、鎖機制有著更好的優(yōu)化工碾。另外,MySQL 5.7版本對優(yōu)化器提升了很多百姓,比如MySQL 5.7的in語句子查詢能夠使用index range scan方式渊额,Union all不再產(chǎn)生臨時表,排序效率上也有所提升垒拢。我們從MySQL 5.7版本的存儲引擎增強旬迹,硬件、操作系統(tǒng)求类、配置參數(shù)優(yōu)化奔垦、設計規(guī)范優(yōu)化幾個層面來全面優(yōu)化MySQL服務器。
第6章MySQL性能監(jiān)控尸疆;MySQL被越來越多的企業(yè)接受椿猎。隨著企業(yè)發(fā)展惶岭,MySQL存儲數(shù)據(jù)日益膨脹,性能分析犯眠、監(jiān)控預警顯得非常重要按灶。在某些場景下,通常會部署一套MySQL監(jiān)控/圖形工具筐咧,然后根據(jù)MySQL監(jiān)控面板提供的信息來執(zhí)行進一步的調(diào)優(yōu)鸯旁。
第7章MySQL主從復制詳解;MySQL的主從復制功能是構建基于MySQL數(shù)據(jù)庫的高可用量蕊、高性能的應用程序基礎铺罢,既能用于分擔主數(shù)據(jù)庫的讀負載,也為高可用HA等工作提供了更多的支持残炮。主從復制是指數(shù)據(jù)可以從一個MySQL數(shù)據(jù)庫服務器主節(jié)點復制到另外一個或多個MySQL數(shù)據(jù)庫服務器從節(jié)點韭赘。主從復制可以用于數(shù)據(jù)實時備份、讀寫分離吉殃、高可用HA等企業(yè)場景中辞居。
第8章PXC高可用解決方案;Percona公司的Percona XtraDB Cluster(簡稱PXC)是基于Galera協(xié)議 的 MySQL 高 可 用 性 集 群 架 構 蛋勺, 集 成 了 Percona Server 和 PerconaXtraBackup瓦灶,同時采用了Codership Galera庫。Percona Xtradb Cluster在原MySQL代碼上通過Galera包將不同的MySQL實例連接起來抱完,實現(xiàn)了multi-master的集群架構贼陶。它可以實現(xiàn)多個MySQL節(jié)點間的數(shù)據(jù)同步復制以及讀寫,不但可以保障數(shù)據(jù)庫的服務高可用巧娱,而且保證整個集群所有數(shù)據(jù)的強一致性碉怔,滿足CAP理論中的一致性(Consistency)和可用性(Availability)。
第9章基于MHA實現(xiàn)的MySQL自動故障轉(zhuǎn)移集群禁添;MHA(Master High Avaliability)是由日本的一位工程師采用Perl語言編寫的一個腳本管理工具撮胧,是一款開源的MySQL高可用解決方案軟件,能在MySQL主從復制的基礎上實現(xiàn)自動化主服務器故障轉(zhuǎn)移老翘,目前在MySQL高可用方面是一個相對成熟的解決方案芹啥。在MySQL故障切換過程中,MHA能做到在30秒之內(nèi)自動完成數(shù)據(jù)庫的故障切換操作铺峭,并且在進行故障切換的過程中能在最大程度上保證數(shù)據(jù)的一致性墓怀,以達到真正意義上的高可用。
第10章MySQL Group Replication卫键;MySQL Group Replication(MGR)是MySQL官方于2016年12月推出的一個全新的高可用的解決方案傀履。MGR被認為是繼Oracle Database RAC之后又一個“真正”的集群,也是MySQL官方基于組復制概念并充分參考MariaDB Galera Cluster和Percona XtraDB Cluster結(jié)合而來的新的高可用集群架構莉炉。它是官方推出的一種基于Paxos協(xié)議的狀態(tài)機復制钓账,徹底解決了基于傳統(tǒng)的異步復制和半同步復制中數(shù)據(jù)一致性問題無法保證的情況碴犬,讓MySQL數(shù)據(jù)庫打開互聯(lián)網(wǎng)金融行業(yè)的大門。
第11章Keepalived+雙主復制的高可用架構官扣;雙主復制配合Keepalived這種MySQL高可用架構設計也是基于MySQL的主從復制原理翅敌,而Keepalived使用VIP,并利用Keepalived自帶的服務監(jiān)控功能和自定義腳本來實現(xiàn)master主服務器故障自動切換惕蹄。這套MySQL雙主復制+Keepalived架構其實可以適用于各種業(yè)務蚯涮,是一種簡單、便捷的高可用方案卖陵。
第12章數(shù)據(jù)庫分庫分表與中間件介紹遭顶;大型網(wǎng)站用戶數(shù)和數(shù)據(jù)庫規(guī)模急劇上升,關系型數(shù)據(jù)庫常見的性能瓶頸主要體現(xiàn)在兩點:一是大量的并發(fā)讀寫操作泪蔫,導致單庫出現(xiàn)負載壓力過大棒旗;二是單表存儲數(shù)據(jù)量過大,導致查詢效率低下撩荣。這時常見的做法便是對數(shù)據(jù)庫實施分庫分表即Sharding改造來應對海量數(shù)據(jù)和高并發(fā)對數(shù)據(jù)庫的沖擊铣揉,與此同時,支持分庫分表并且對業(yè)務開發(fā)透明的數(shù)據(jù)庫中間件也大行其道餐曹。
第13章Mycat中間件詳解逛拱;由于真正的數(shù)據(jù)庫需要存儲引擎,而Mycat并沒有存儲引擎台猴,因此它并不是完全意義上的分布式數(shù)據(jù)庫系統(tǒng)朽合,可以更貼切地說成是數(shù)據(jù)庫的中間件,就是介于數(shù)據(jù)庫與應用之間進行數(shù)據(jù)處理與交互的中間服務饱狂。傳統(tǒng)的訪問數(shù)據(jù)庫是直接連接數(shù)據(jù)庫曹步,創(chuàng)建數(shù)據(jù)庫實例,根據(jù)需求對數(shù)據(jù)庫中的數(shù)據(jù)進行增刪查改休讳。但是讲婚,當我們使用Mycat后,其實直接連接的是Mycat俊柔,通過Mycat對真正的數(shù)據(jù)庫進行操作磺樱,在Mycat上我們可以做一些分表分庫等操作,達到我們對數(shù)據(jù)庫的可擴展要求婆咸。
相關知識資料移步主頁簡介或者
加微:yxqbkd