高性能MySQL復(fù)制與緩存的用法

這篇文章主要介紹“高性能MySQL復(fù)制與緩存的用法”,在日常操作中,相信很多人在高性能MySQL復(fù)制與緩存的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”高性能MySQL復(fù)制與緩存的用法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出沁縣免費做網(wǎng)站回饋大家。

  1. 復(fù)制解決的基本問題

    讓一臺服務(wù)器的數(shù)據(jù)讓其他服務(wù)器保持同步,一臺主庫的數(shù)據(jù)可以同步到多臺備庫上,悲苦本身也可以被配置成另外一臺服務(wù)器的主庫。

    MySQL支持兩種復(fù)制方式:基于行的復(fù)制和基于語句的復(fù)制(邏輯復(fù)制)。這兩種都是在主庫上記錄二進制日志,在備庫重放日志的方式來實現(xiàn)異步的數(shù)據(jù)復(fù)制, 這說明同一時間主備庫存在不一致,并且無法保證主備之間的延遲。

  2. 常見的復(fù)制用途

    數(shù)據(jù)分布:MySQL通常復(fù)制不會造成很大的貸款壓力,但基于行的復(fù)制會比基于語句的復(fù)制帶寬壓力大, 可以隨意停止或開始復(fù)制,并在不同的地理位置來分布數(shù)據(jù)備份,例如不同的數(shù)據(jù)中心, 即使在不穩(wěn)定的網(wǎng)絡(luò)環(huán)境下,遠(yuǎn)程復(fù)制也可以工作,單位了低復(fù)制延遲,最好有一個穩(wěn)定的低延遲連接。

    負(fù)載均衡:將讀操作分布到多個服務(wù)器上,實現(xiàn)對讀密集型應(yīng)用的優(yōu)化

    備份:對備份來說,復(fù)制是一項很有意義的技術(shù)補充,但復(fù)制既不是備份也不能取代備份。

    高可用性和故障切換:幫助應(yīng)用程序避免MySQL單點失敗,一個包含復(fù)制的設(shè)計良好的故障切換系統(tǒng)能夠顯著地縮短宕機時間

    MySQL升級測試:使用一個更高版本的MySQL作為備庫,保證在升級全部實例之前。查詢能夠在備庫按照預(yù)期執(zhí)行。

  3. 復(fù)制步驟

    主庫把數(shù)據(jù)更改記錄到二進制日志中

    在提交失誤完成數(shù)據(jù)更新前,主庫將數(shù)據(jù)更新的時間記錄到二進制日志中,按照事務(wù)提交的順序 而非每條語句的執(zhí)行順序來記錄二進制日志,在記錄之后,主庫會告訴存儲引擎可以提交事物了。

    備庫將主庫上的日志復(fù)制到自己的中繼日志中

    備庫讀取中繼日志中的時間,將其重放到備庫數(shù)據(jù)之上

  4. 基于語句的復(fù)制

    主庫會記錄那些造成數(shù)據(jù)更改的查詢,當(dāng)悲苦讀取并重放這些事件時,實際上這只是把主庫上執(zhí)行過的SQL在執(zhí)行一遍

    優(yōu)勢:實現(xiàn)簡單,二進制日志里面的時間更加緊湊,不會使用太多帶寬

    劣勢:更新必須串行,需要更多的鎖,不是所有的引擎都支持這種復(fù)制模式,存在一些無法被正確復(fù)制的SQL, 存儲過程和觸發(fā)器在使用基于語句的復(fù)制模式時也可能存在問題

    基于行的復(fù)制

    將實際數(shù)據(jù)記錄在二進制日志中,可以正確復(fù)制每一行,一些語句可以被更有效的復(fù)制

  5. 一主多備結(jié)構(gòu)

    為不同的角色使用不同的備庫比如 添加不同的所以或使用不同的存儲引擎

    把一臺備庫當(dāng)做代用的主庫,除了復(fù)制沒有其他數(shù)據(jù)傳輸

    將一臺備庫放到遠(yuǎn)程數(shù)據(jù)中心,用作災(zāi)難恢復(fù)

    延遲一個或多個備庫,以備災(zāi)難恢復(fù)

    使用一個備庫作為備份、培訓(xùn)、開發(fā)、或者測試使用服務(wù)器

  6. 主-被動模式服務(wù)器對稱設(shè)置

    確保兩臺服務(wù)器上有相同的數(shù)據(jù)

    啟用二進制日志,選擇唯一的服務(wù)器ID,并創(chuàng)建復(fù)制賬號

    啟用備庫更新的日志記錄

    把被動服務(wù)器配置成只讀,防止可能與主動服務(wù)器上的更新產(chǎn)生沖突

    啟動每個服務(wù)器的MySQL實例

    將每個主庫設(shè)置為對方的備庫,使用新建的二進制日志開始工作

    主動服務(wù)器上更新時:更新記錄到二進制日志中,通過復(fù)制傳遞給被動服務(wù)器的中繼日志中 被動服務(wù)器執(zhí)行查詢并將其記錄到自己的二進制日志中,由于事件的服務(wù)器ID與主動服務(wù)器的 相同,因此主動服務(wù)器忽略這些事件。

    這種類似于創(chuàng)建一個熱備份,但是可以使用這個備份來提高性能,比如執(zhí)行讀操作、備份、離線 維護升級等。但是不會獲得比單臺服務(wù)器更好的寫性能。

  7. 擁有備庫的主-主結(jié)構(gòu)

    為每一個主庫增加一個備庫,增加了冗余,對于不同地理位置的復(fù)制拓?fù)?,能夠消除站點但電視系哦啊的問題 可以將讀查詢分配到備庫上

    主庫失效時,用備庫來代替主庫是可行的,也可以把備庫只想一個不同的主庫,但需要考慮增加的復(fù)雜度

  8. 環(huán)形復(fù)制拓?fù)?/strong>

    每一個服務(wù)器都是他之前服務(wù)器的備庫,是他之后服務(wù)器的主庫

  9. 主庫 分發(fā)主庫 備庫

    分發(fā)主庫實際上也是一個備庫,他的目的是提取和提供主庫的二進制日志 多個備庫連接到分發(fā)主庫,原來的主庫擺脫了負(fù)擔(dān),為了避免在分發(fā)主庫上做實際的查詢, 可以將他的表修改為blackhole存儲引擎

    可以使用分發(fā)主庫實現(xiàn)對二進制日志時間執(zhí)行過濾和重寫規(guī)則,這個比在每個備庫上重復(fù)進行日志記錄、 重寫和過濾效率高得多

    在分發(fā)主庫上使用blackhole表,可以支持更多的備庫,雖然會在分發(fā)主庫上執(zhí)行查詢, 但其代價非常小,因為blackhole的表里面沒有任何數(shù)據(jù),blackhole表的缺點是存在bug, 在某些情況下會忘記將自增的id寫入二進制日志

    使用分發(fā)主庫無法使用一個備庫來代替主庫,因為分發(fā)主庫的存在,導(dǎo)致各個備庫與原始主庫的二進制日志坐標(biāo)已經(jīng)不相同

  10. 日志服務(wù)器

    mysqlbinlog:用來記錄mysql內(nèi)部增刪改查等對數(shù)據(jù)庫有更新的內(nèi)容的記錄,對數(shù)據(jù)庫的查詢select或show等不會被binlog記錄,主要用于數(shù)據(jù)庫的主從復(fù)制以及增量恢復(fù)

    復(fù)制作為應(yīng)用二進制日志的方法已經(jīng)被大量的用戶所測試,能夠證明是可行的的,mysqlbinlog可能無法正確生成二進制日志中的數(shù)據(jù)更新

    復(fù)制的速度更快,因為無需將語句從日志導(dǎo)出來并傳送給mysql

    很容易觀察到復(fù)制過程

    方便處理錯誤,例如可以跳過執(zhí)行失敗的語句

    方便過濾復(fù)制事件

    有時候mysqlbinlog會因為日志記錄格式更改無法讀取二進制日志

  11. 緩存

    應(yīng)用層以下的緩存:MySQL服務(wù)器有自己的內(nèi)部緩存,也可以構(gòu)建自己的緩存和匯總表,緩存表比許多應(yīng)用層緩存更加持久,在服務(wù)器重啟之后他們還存在

    應(yīng)用層緩存:在同一臺機器的內(nèi)存中緩存數(shù)據(jù),或者通過網(wǎng)絡(luò)存在另一臺機器的內(nèi)存中, 應(yīng)用層緩存可以節(jié)省獲取數(shù)據(jù)以及基于這些數(shù)據(jù)進行計算。但是緩存命中率低,并且可能使用更多的內(nèi)存。

    應(yīng)用緩存之本地緩存:小,只在進程處理請求期間存在于進程內(nèi)存中??梢员苊鈱δ承┵Y源的重復(fù)請求

    應(yīng)用緩存之本地共享內(nèi)存緩存:中等大小,快速,難以在多臺機器間同步,對小型的半靜態(tài)位數(shù)據(jù)比較合適 ,但是訪問非常快,通常比任何遠(yuǎn)程緩存訪問都快

    應(yīng)用緩存之分布式內(nèi)存緩存:比本地共享內(nèi)存緩存大得多,增長容易,緩存中創(chuàng)建的數(shù)據(jù)的每一個比特都只有一個副本,不會浪費內(nèi)存,也不會因為緩存創(chuàng)建的數(shù)據(jù)存在不同的地方而引入一致性問題。 非常適合存儲共享對象,但是演示高,最有效的方法是批量進行多個獲取操作,還要考慮怎么增加更多的節(jié)點, 以及某個節(jié)點崩潰了怎么處理,應(yīng)用程序必須決定在節(jié)點間怎么分布或充分不緩存對象

    應(yīng)用緩存之磁盤緩存:最好是持久性對象,很難全部存進內(nèi)存的對象或者金泰內(nèi)容

  12. 緩存控制策略

    問題:重復(fù)數(shù)據(jù),有多而地方需要更新數(shù)據(jù),所以要避免督導(dǎo)臟數(shù)據(jù)

    TTL(time to live 存活時間):緩存對象存儲是設(shè)置一個過期時間,可以通過清理進程在未達到過期時間后刪除對象, 或者留到下次訪問時再清理,對于數(shù)據(jù)很少變更或沒有新數(shù)據(jù)的情況,這是最好的失效策略。

    顯示失效:如果不能接受臟數(shù)據(jù),那么在更新原始數(shù)據(jù)時同時使緩存失效

    寫——失效:標(biāo)記緩存數(shù)據(jù)已經(jīng)過期(是否清理緩存數(shù)據(jù)是可選的)。

    寫——更新:更新數(shù)據(jù)時替換掉緩存項

    讀時失效:采用對象版本控制

    緩存對象分層:分層緩存對象對檢索、失效和內(nèi)存利用都有幫助,相對于只緩存對象,也可以緩存對象的ID、對象的ID組等需要一起檢索的數(shù)據(jù)

    預(yù)生成內(nèi)容:在后臺預(yù)先請求一些頁面,并將結(jié)果存為靜態(tài)頁面。

    作為基礎(chǔ)組件的緩存

    使用handlerSocket 和memcached:handlerSocketto 剛剛一個簡單的協(xié)議訪問innodb handler 繞過上層的服務(wù)器層,通過網(wǎng)絡(luò)直接連接innodb引擎,通過memcached協(xié)議訪問innoDB

到此,關(guān)于“高性能MySQL復(fù)制與緩存的用法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

網(wǎng)頁名稱:高性能MySQL復(fù)制與緩存的用法
網(wǎng)頁路徑:http://muchs.cn/article20/jpdjco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、電子商務(wù)、移動網(wǎng)站建設(shè)、網(wǎng)站改版、做網(wǎng)站、網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)