這篇文章主要介紹“高性能MySQL復(fù)制與緩存的用法”,在日常操作中,相信很多人在高性能MySQL復(fù)制與緩存的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”高性能MySQL復(fù)制與緩存的用法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出沁縣免費(fèi)做網(wǎng)站回饋大家。
復(fù)制解決的基本問題
讓一臺服務(wù)器的數(shù)據(jù)讓其他服務(wù)器保持同步,一臺主庫的數(shù)據(jù)可以同步到多臺備庫上,悲苦本身也可以被配置成另外一臺服務(wù)器的主庫。
MySQL支持兩種復(fù)制方式:基于行的復(fù)制和基于語句的復(fù)制(邏輯復(fù)制)。這兩種都是在主庫上記錄二進(jìn)制日志,在備庫重放日志的方式來實(shí)現(xiàn)異步的數(shù)據(jù)復(fù)制, 這說明同一時(shí)間主備庫存在不一致,并且無法保證主備之間的延遲。
常見的復(fù)制用途
數(shù)據(jù)分布:MySQL通常復(fù)制不會(huì)造成很大的貸款壓力,但基于行的復(fù)制會(huì)比基于語句的復(fù)制帶寬壓力大, 可以隨意停止或開始復(fù)制,并在不同的地理位置來分布數(shù)據(jù)備份,例如不同的數(shù)據(jù)中心, 即使在不穩(wěn)定的網(wǎng)絡(luò)環(huán)境下,遠(yuǎn)程復(fù)制也可以工作,單位了低復(fù)制延遲,最好有一個(gè)穩(wěn)定的低延遲連接。
負(fù)載均衡:將讀操作分布到多個(gè)服務(wù)器上,實(shí)現(xiàn)對讀密集型應(yīng)用的優(yōu)化
備份:對備份來說,復(fù)制是一項(xiàng)很有意義的技術(shù)補(bǔ)充,但復(fù)制既不是備份也不能取代備份。
高可用性和故障切換:幫助應(yīng)用程序避免MySQL單點(diǎn)失敗,一個(gè)包含復(fù)制的設(shè)計(jì)良好的故障切換系統(tǒng)能夠顯著地縮短宕機(jī)時(shí)間
MySQL升級測試:使用一個(gè)更高版本的MySQL作為備庫,保證在升級全部實(shí)例之前。查詢能夠在備庫按照預(yù)期執(zhí)行。
復(fù)制步驟
主庫把數(shù)據(jù)更改記錄到二進(jìn)制日志中
在提交失誤完成數(shù)據(jù)更新前,主庫將數(shù)據(jù)更新的時(shí)間記錄到二進(jìn)制日志中,按照事務(wù)提交的順序 而非每條語句的執(zhí)行順序來記錄二進(jìn)制日志,在記錄之后,主庫會(huì)告訴存儲(chǔ)引擎可以提交事物了。
備庫將主庫上的日志復(fù)制到自己的中繼日志中
備庫讀取中繼日志中的時(shí)間,將其重放到備庫數(shù)據(jù)之上
基于語句的復(fù)制
主庫會(huì)記錄那些造成數(shù)據(jù)更改的查詢,當(dāng)悲苦讀取并重放這些事件時(shí),實(shí)際上這只是把主庫上執(zhí)行過的SQL在執(zhí)行一遍
優(yōu)勢:實(shí)現(xiàn)簡單,二進(jìn)制日志里面的時(shí)間更加緊湊,不會(huì)使用太多帶寬
劣勢:更新必須串行,需要更多的鎖,不是所有的引擎都支持這種復(fù)制模式,存在一些無法被正確復(fù)制的SQL, 存儲(chǔ)過程和觸發(fā)器在使用基于語句的復(fù)制模式時(shí)也可能存在問題
基于行的復(fù)制
將實(shí)際數(shù)據(jù)記錄在二進(jìn)制日志中,可以正確復(fù)制每一行,一些語句可以被更有效的復(fù)制
一主多備結(jié)構(gòu)
為不同的角色使用不同的備庫比如 添加不同的所以或使用不同的存儲(chǔ)引擎
把一臺備庫當(dāng)做代用的主庫,除了復(fù)制沒有其他數(shù)據(jù)傳輸
將一臺備庫放到遠(yuǎn)程數(shù)據(jù)中心,用作災(zāi)難恢復(fù)
延遲一個(gè)或多個(gè)備庫,以備災(zāi)難恢復(fù)
使用一個(gè)備庫作為備份、培訓(xùn)、開發(fā)、或者測試使用服務(wù)器
主-被動(dòng)模式服務(wù)器對稱設(shè)置
確保兩臺服務(wù)器上有相同的數(shù)據(jù)
啟用二進(jìn)制日志,選擇唯一的服務(wù)器ID,并創(chuàng)建復(fù)制賬號
啟用備庫更新的日志記錄
把被動(dòng)服務(wù)器配置成只讀,防止可能與主動(dòng)服務(wù)器上的更新產(chǎn)生沖突
啟動(dòng)每個(gè)服務(wù)器的MySQL實(shí)例
將每個(gè)主庫設(shè)置為對方的備庫,使用新建的二進(jìn)制日志開始工作
主動(dòng)服務(wù)器上更新時(shí):更新記錄到二進(jìn)制日志中,通過復(fù)制傳遞給被動(dòng)服務(wù)器的中繼日志中 被動(dòng)服務(wù)器執(zhí)行查詢并將其記錄到自己的二進(jìn)制日志中,由于事件的服務(wù)器ID與主動(dòng)服務(wù)器的 相同,因此主動(dòng)服務(wù)器忽略這些事件。
這種類似于創(chuàng)建一個(gè)熱備份,但是可以使用這個(gè)備份來提高性能,比如執(zhí)行讀操作、備份、離線 維護(hù)升級等。但是不會(huì)獲得比單臺服務(wù)器更好的寫性能。
擁有備庫的主-主結(jié)構(gòu)
為每一個(gè)主庫增加一個(gè)備庫,增加了冗余,對于不同地理位置的復(fù)制拓?fù)?,能夠消除站點(diǎn)但電視系哦啊的問題 可以將讀查詢分配到備庫上
主庫失效時(shí),用備庫來代替主庫是可行的,也可以把備庫只想一個(gè)不同的主庫,但需要考慮增加的復(fù)雜度
環(huán)形復(fù)制拓?fù)?/strong>
每一個(gè)服務(wù)器都是他之前服務(wù)器的備庫,是他之后服務(wù)器的主庫
主庫 分發(fā)主庫 備庫
分發(fā)主庫實(shí)際上也是一個(gè)備庫,他的目的是提取和提供主庫的二進(jìn)制日志 多個(gè)備庫連接到分發(fā)主庫,原來的主庫擺脫了負(fù)擔(dān),為了避免在分發(fā)主庫上做實(shí)際的查詢, 可以將他的表修改為blackhole存儲(chǔ)引擎
可以使用分發(fā)主庫實(shí)現(xiàn)對二進(jìn)制日志時(shí)間執(zhí)行過濾和重寫規(guī)則,這個(gè)比在每個(gè)備庫上重復(fù)進(jìn)行日志記錄、 重寫和過濾效率高得多
在分發(fā)主庫上使用blackhole表,可以支持更多的備庫,雖然會(huì)在分發(fā)主庫上執(zhí)行查詢, 但其代價(jià)非常小,因?yàn)閎lackhole的表里面沒有任何數(shù)據(jù),blackhole表的缺點(diǎn)是存在bug, 在某些情況下會(huì)忘記將自增的id寫入二進(jìn)制日志
使用分發(fā)主庫無法使用一個(gè)備庫來代替主庫,因?yàn)榉职l(fā)主庫的存在,導(dǎo)致各個(gè)備庫與原始主庫的二進(jìn)制日志坐標(biāo)已經(jīng)不相同
日志服務(wù)器
mysqlbinlog:用來記錄mysql內(nèi)部增刪改查等對數(shù)據(jù)庫有更新的內(nèi)容的記錄,對數(shù)據(jù)庫的查詢select或show等不會(huì)被binlog記錄,主要用于數(shù)據(jù)庫的主從復(fù)制以及增量恢復(fù)
復(fù)制作為應(yīng)用二進(jìn)制日志的方法已經(jīng)被大量的用戶所測試,能夠證明是可行的的,mysqlbinlog可能無法正確生成二進(jìn)制日志中的數(shù)據(jù)更新
復(fù)制的速度更快,因?yàn)闊o需將語句從日志導(dǎo)出來并傳送給mysql
很容易觀察到復(fù)制過程
方便處理錯(cuò)誤,例如可以跳過執(zhí)行失敗的語句
方便過濾復(fù)制事件
有時(shí)候mysqlbinlog會(huì)因?yàn)槿罩居涗浉袷礁臒o法讀取二進(jìn)制日志
緩存
應(yīng)用層以下的緩存:MySQL服務(wù)器有自己的內(nèi)部緩存,也可以構(gòu)建自己的緩存和匯總表,緩存表比許多應(yīng)用層緩存更加持久,在服務(wù)器重啟之后他們還存在
應(yīng)用層緩存:在同一臺機(jī)器的內(nèi)存中緩存數(shù)據(jù),或者通過網(wǎng)絡(luò)存在另一臺機(jī)器的內(nèi)存中, 應(yīng)用層緩存可以節(jié)省獲取數(shù)據(jù)以及基于這些數(shù)據(jù)進(jìn)行計(jì)算。但是緩存命中率低,并且可能使用更多的內(nèi)存。
應(yīng)用緩存之本地緩存:小,只在進(jìn)程處理請求期間存在于進(jìn)程內(nèi)存中??梢员苊鈱δ承┵Y源的重復(fù)請求
應(yīng)用緩存之本地共享內(nèi)存緩存:中等大小,快速,難以在多臺機(jī)器間同步,對小型的半靜態(tài)位數(shù)據(jù)比較合適 ,但是訪問非???,通常比任何遠(yuǎn)程緩存訪問都快
應(yīng)用緩存之分布式內(nèi)存緩存:比本地共享內(nèi)存緩存大得多,增長容易,緩存中創(chuàng)建的數(shù)據(jù)的每一個(gè)比特都只有一個(gè)副本,不會(huì)浪費(fèi)內(nèi)存,也不會(huì)因?yàn)榫彺鎰?chuàng)建的數(shù)據(jù)存在不同的地方而引入一致性問題。 非常適合存儲(chǔ)共享對象,但是演示高,最有效的方法是批量進(jìn)行多個(gè)獲取操作,還要考慮怎么增加更多的節(jié)點(diǎn), 以及某個(gè)節(jié)點(diǎn)崩潰了怎么處理,應(yīng)用程序必須決定在節(jié)點(diǎn)間怎么分布或充分不緩存對象
應(yīng)用緩存之磁盤緩存:最好是持久性對象,很難全部存進(jìn)內(nèi)存的對象或者金泰內(nèi)容
緩存控制策略
問題:重復(fù)數(shù)據(jù),有多而地方需要更新數(shù)據(jù),所以要避免督導(dǎo)臟數(shù)據(jù)
TTL(time to live 存活時(shí)間):緩存對象存儲(chǔ)是設(shè)置一個(gè)過期時(shí)間,可以通過清理進(jìn)程在未達(dá)到過期時(shí)間后刪除對象, 或者留到下次訪問時(shí)再清理,對于數(shù)據(jù)很少變更或沒有新數(shù)據(jù)的情況,這是最好的失效策略。
顯示失效:如果不能接受臟數(shù)據(jù),那么在更新原始數(shù)據(jù)時(shí)同時(shí)使緩存失效
寫——失效:標(biāo)記緩存數(shù)據(jù)已經(jīng)過期(是否清理緩存數(shù)據(jù)是可選的)。
寫——更新:更新數(shù)據(jù)時(shí)替換掉緩存項(xiàng)
讀時(shí)失效:采用對象版本控制
緩存對象分層:分層緩存對象對檢索、失效和內(nèi)存利用都有幫助,相對于只緩存對象,也可以緩存對象的ID、對象的ID組等需要一起檢索的數(shù)據(jù)
預(yù)生成內(nèi)容:在后臺預(yù)先請求一些頁面,并將結(jié)果存為靜態(tài)頁面。
作為基礎(chǔ)組件的緩存
使用handlerSocket 和memcached:handlerSocketto 剛剛一個(gè)簡單的協(xié)議訪問innodb handler 繞過上層的服務(wù)器層,通過網(wǎng)絡(luò)直接連接innodb引擎,通過memcached協(xié)議訪問innoDB
到此,關(guān)于“高性能MySQL復(fù)制與緩存的用法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
網(wǎng)頁名稱:高性能MySQL復(fù)制與緩存的用法
網(wǎng)頁路徑:http://jinyejixie.com/article20/jpdjco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、電子商務(wù)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站改版、做網(wǎng)站、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)