MySQL之應用層優化和備份與恢復(一)

應用層優化

緩存

作為基礎組件的緩存

緩存有可能成為基礎設施的重要組成部分。也很容易陷入一個陷阱,認為緩存雖然很好用,但并不是重要到非有不可得東西。你也許會辯駁,如果緩存服務器宕機或者緩存被清空,請求也可以直接落在數據庫上,系統依然可以正常運行。如果是剛剛將緩存加入應用系統,這也許是對的,但緩存的加入可以使得在應用壓力顯著增長時不需要對系統的某些部分同比增加資源投入——通常是數據部分。因此,系統可能慢慢地變得對緩存非常依賴,卻沒有被發覺。
例如,如果高速緩存命中率是90%,當由于某種原因失去緩存,數據庫上的負載將增加到原來的10倍。這很可能導致壓力超過數據庫服務器的性能極限。為了避免像這樣的意外,應該設計一些高可用性緩存(包括數據和服務)的解決方案,或者至少是評估好禁用緩存或丟失緩存時的性能影響。比如說可以設計應用在遇到這樣的情況時能夠進行降級處理。

使用HandlerSocket和memcached

相對于數據存儲在MySQL中而緩存在MySQL外部的緩存方案,另外有一種替代方法是為MySQL創建一個更快的訪問路徑,直接繞過使用緩存。對于小兒簡單的查詢語句,很大一部分開銷來自解析SQL,檢查權限,生成執行計劃,等等。如果這種開銷可以避免,MySQL在處理簡單查詢時將非常快。目前有兩個解決方案可以用所謂的NoSQL方式訪問MySQL。第一種時一個后臺進程插件,成為HandlerSocket,由DeNA開發,這是日本最大的社交網站。HandlerSocket允許通過一個簡單的協議訪問InnoDB Handler對象。實際上,也就是繞過了上層的服務器層,通過網絡直接連接到了InnoDB引擎層。有報告稱HandlerSocket每秒可以執行超過750 000條查詢。Percona Server分支中自帶了HandlerSocket插件引擎層。第二個方案時通過memcached協議訪問InnoDB。MySQL5.6的實驗室版本有一個插件提供了這個接口。兩種方法都有一些限制——特別是memcached的方法,這種方法對很多訪問數據的方法都不支持。為什么會希望采用SQL以外的辦法訪問數據呢?除了速度之外,最大的可能是簡單。這樣做最大的好處是可以擺脫緩存,以及所有的失效邏輯,還有為它們服務的額外的基礎設施

拓展MySQL

如果MySQL不能做你需要的事,一種可能是拓展其功能。在這里不會展示如何去做到這一點,但會提供一些可能的方向。如果你對進一步探索有興趣,那么有很多很好的在線資源。當我們說"MySQL不能做你需要的事",我們指的是兩件事情:MySQL根本做不到這一點或者MySQL可以做到,但是只能通過緩慢或笨拙的方法,總之做得不夠好。無論哪個都是需要對MySQL拓展的原因。好消息事,MySQL已經越來越模塊化和通用。存儲引擎是拓展MySQL的一個很好的方式。Brian Aker已經寫了一個存儲引擎的框架,還有一系列介紹有關如何開始編寫自己的存儲引擎的文章。這是目前幾個主要的第三方存儲引擎的基礎。許多公司都編寫了它們自己的內部存儲引擎。例如,一些社交網站公司使用了特殊的為社交圖形操作設計的存儲引擎,我們還知道有個公司定制了一個用于模糊搜索的引擎。寫一個簡單的自定義存儲引擎并不難。還可以使用存儲引擎作為另一個軟件的接口。Sphinx引擎就是一個很好的例子,該引擎是Spinx全文檢索軟件的接口

MySQL的替代品

MySQL并不是適合每一個場景的解決方案。有些工作通常在MySQL以外來做會更好,即使MySQL理論上也可以做到。最明顯的一個例子是在傳統的文件系統中存儲文件,而不是在表中。圖像文件是靜丹案例:雖然可以把它們放到一個BLOB列,但這通常不是個好辦法(使用MySQL的復制來快速分布鏡像到其他機器更有優勢,我們知道一些程序使用這種技術)。一般的做法是,在文件系統中存儲圖片或其他大型二進制文件,而在MySQL中只存儲文件名;然后應用程序在MySQL之外存取文件。對于Web應用程序,可以把文件名放在元素的src屬性中,這樣就可以實現對文件的存取。
全文檢索是另一個最好放在MySQL之外處理額例子——MySQL在全文搜索方面明顯不如Lucene和Sphinx。 NDB API也可能對某些任務有用。例如,盡管MySQL的NDB集群存儲引擎(目前還)不適合存儲一個高性能Web應用程序的全部數據,但用NDB API直接存儲網站會話數據或用戶注冊信息還是可能的。在如下網站可以了解到更多NDB API的內容.還有供Apache使用的NDB模塊,mod_ndb.
最后,對于某些操作——如圖形關系和樹遍歷——關系型數據并不總是正確的典范,MySQL并不擅長分布式數據處理,因為它缺乏并行執行查詢的能力。處于這些目的情況還是建議使用其他工具(可能與MySQL結合).現在想到的例子包括:

  • 1.對于簡單的鍵——值存儲,在復制嚴重落后的非常高速的訪問場景中,我們建議用Redis替換MySQL.即使MySQL主庫可以承擔這樣的壓力,備庫的延遲也是非常讓人頭疼的。Redis也常用來做隊列,因為它對隊列操作支持得很好
  • 2.Hadoop是房間中得大象,一語雙關。混合MySQL/Hadoop得部署在處理大型或半結構化數據時非常常見

備份與恢復

概述

如果沒有提前做好備份規劃,也許以后會發現已經錯失了一些最佳得選擇。例如,在服務器已經配置好了以后,才想起應該使用LVM,以便可以獲取文件系統的快照——但這時已經太遲了。在為別分配置系統參數時,可能沒有注意到某些系統配置對性能有著重要影響。如果沒有計劃做定期的恢復演練,當真的需要恢復時,就會發現并沒有那么順利。在此假設大部分用戶主要使用InnoDB而不是MyISAM。也不會涵蓋一個精心設計的備份和恢復解決方案的所有部分——而僅涉及與MySQL相關的部分。不打算包括的話題如下:

  • 1.安全(訪問備份,恢復數據的權限,文件是否需要加密)
  • 2.備份存儲在哪里,包括它們應該離數據多遠(在一塊不同的盤上,一臺不同的服務器上,或離線存儲),以及如何將數據從源頭移動到目的地
  • 3.保留策略、審計、法律要求,以及相關的條款
  • 4.存儲解決方案和介質,壓縮,以及增量備份
  • 5.存儲的格式
  • 6.對備份的監控和報告
  • 7.存儲層內置備份功能,或者其他專用設備,例如預制式文件服務器

讓我們先澄清幾個核心術語。首先,經常可以聽到所謂的熱備份、暖備份和冷備份。人們經常使用這些詞來表示一個備份的影響:例如"熱"備份不需要任何的服務停機時間。問題是對這些術語的理解因人而異。有些工具雖然在名字中使用了"熱備份",但實際上并不是所認為的那樣。我們盡量避開這些術語,而直接說明某個特別的技術或工具對服務器的影響。另外兩個讓人困惑的詞是還原和恢復。還原意味著從備份文件中獲取數據,可以加載這些文件到MySQL里,也可以將這些文件放置到MySQL期望的路徑中。恢復一般意味著當某些異常發生后對一個系統或其部分的拯救。包括從備份中還原數據,以及使服務器完全恢復功能的所有必要步驟,例如重啟MySQL、改變配置和預熱服務器的緩存等。
在很多人的概念中,恢復僅意味著修復崩潰后損壞的表。這與恢復一個完整的服務器使不同的。存儲引擎的崩潰恢復要求數據和日志文件一致。要確保數據文件中只包含已經提交的事務所做的修改,恢復操作會將日志中還沒有應用到數據文件的事務重新執行。這也許是恢復過程的一部分,甚至是備份的一部分。然而,這和一個意外的DROP TABLE事故后需要做的事是不一樣的。

為什么要備份?

下面是備份非常重要的幾個理由:

  • 1.災難恢復
    災難恢復是下列場景下需要做的事情:硬件故障、一個不經意的Bug導致數據損壞,或者服務器及其數據由于歐協原因不可獲取或無法使用等。你需要準備好應付很多問題:某人偶爾連錯數據庫服務器執行了一個ALTER TABLE的操作,計放大樓被炸毀,惡意的黑客攻擊或MySQL的Bug等。盡管遭受任何一個特殊的災難的幾率都非常低,但所有的風險疊加在一起就很有可能會碰到
  • 2.人們改變象發
    不必驚訝,很多人經常會在刪除某些數據后又想要恢復這些數據
  • 3.審計
    有時候需要知道數據或Schema在過去的某個時間點是什么樣的。例如,你也許被卷入一場法律官司,或發現了應用的一個Bug,想知道這段代碼之前干了什么(有時候僅僅依靠代碼的版本控制還不夠)
  • 4.測試
    一個最簡單的基于實際數據來測試的方法是,定期用最新的生產環境數據更i性能測試服務器。如果使用備份的方案就非常簡單:只要把備份文件還原到測試服務器上即可。

檢查你的假設。例如, 你認為共享虛擬主機供應商會提供MySQL服務器的備份?許多主機供應商根本不備份MySQL服務器,另外一些也僅僅在服務器運行時復制文件,這可能會創建一個損壞的沒有用處的備份

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39781.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39781.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39781.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常見鎖策略之可重入鎖VS不可重入鎖

可重入鎖VS不可重入鎖 有一個線程,針對同一把鎖,連續加鎖兩次,如果產生了死鎖,那就是不可重入鎖,如果沒有產生死鎖,那就是可重入鎖. 死鎖 我們之前引入多線程的時候不是講了一個加數字的案例么,我們今天以它來舉例 當我們這樣寫的時候會出現什么問題? 分析:第一個synchron…

前端基礎--Vue3

Vue3基礎 VUE3和VUE2的區別 2020年9月18日,Vue.js發布版3.0版本,代號:One Piece 于 2022 年 2 月 7 日星期一成為新的默認版本! Vue3性能更高,初次渲染快55%, 更新渲染快133% 。體積更小 Vue3.0 打包大小減少41%。 同時Vue3可以更好的支持T…

基于微服務智能推薦健康生活交流平臺的設計與實現(SpringCloud SpringBoot)+文檔

💗博主介紹💗:?在職Java研發工程師、專注于程序設計、源碼分享、技術交流、專注于Java技術領域和畢業設計? 溫馨提示:文末有 CSDN 平臺官方提供的老師 Wechat / QQ 名片 :) Java精品實戰案例《700套》 2025最新畢業設計選題推薦…

vb 學習簡介

vb 第一節 Visual Basic(簡稱VB)是一種高級編程語言,它最初由微軟公司開發,旨在簡化Windows應用程序的開發過程。下面,我們將介紹Visual Basic編程語言的基礎概念和用途,包括其歷史背景、主要特性以及在現代編程中的應用。 歷史背景 Visual Basic起源于1991年,當時微軟…

代碼隨想錄算法訓練營day72 | 117. 軟件構建、47. 參加科學大會

本次題目來自于卡碼網 117. 軟件構建(拓撲排序) python設置默認值 from collections import defaultdict aa defaultdict(int) 拓撲排序:找到入度為0的節點,然后移除。如果最后都能移除,則無環,可以排…

C#發票識別接口,再長的稅號錄入都不怕

“十二金”工程是我國政府在信息化建設中的重要一步,“金稅工程”總稱為中國稅收管理信息系統(CTAIS),是我國電子政務的核心系統之一,是財政的重要環節。十二金”是面向政府辦公業務建立的十二個重點信息應用系統,按“…

解決使用monaco-editor編譯器,編譯器展示內容沒有超過編譯器高度,但是出現滾動條問題

前言: 最近在完成項目時,有使用編譯器進行在線編輯的功能,就選用了monaco-editor編譯器,但是實現功能之后,發現即使在編譯器展示的內容沒有超過編譯器高度的情況下,編譯器依舊存在滾動條,會展示…

計算機網絡--網絡層

一、網絡層的服務和功能 網絡層主要為應用層提供端對端的數據傳輸服務 網絡層接受運輸層的報文段,添加自己的首部,形成網絡層分組。分組是網絡層的傳輸單元。網絡層分組在各個站點的網絡層之間傳輸,最終到達接收方的網絡層。接收方網絡層將運…

如何在 Java 應用中使用 Jedis 客戶端庫來實現 Redis 緩存的基本操作

本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(注明:作者:王文峰…

構建高效盲盒小程序:數據庫設計、安全策略與性能優化

在移動互聯網時代,盲盒經濟以其獨特的魅力迅速崛起,成為連接消費者與商品的新橋梁。盲盒小程序作為這一趨勢的載體,不僅要求用戶體驗流暢,還需確保數據安全與性能卓越。本文將從數據庫設計、安全策略及性能優化三個方面&#xff0…

堆與棧的概念(RTOS)

目錄 #堆在RTOS的概念 #相關代碼表示 #堆相關特點 #棧在RTOS中的概念 #棧的代碼表示 #棧的相關特點 #為什么每個RTOS任務都要有自己的棧 前言:本篇參考韋東山老師的RTOS,連接放在最后 #堆在RTOS的概念 本文所指的堆與棧并不是數據結構中&#xff…

【unity實戰】在Unity中使用有限狀態機制作一個敵人AI

最終效果 文章目錄 最終效果前言有限狀態機的主要作用和意義素材下載邏輯圖敵人動畫配置優雅的代碼文件目錄狀態機代碼定義敵人不同狀態切換創建敵人效果更多的敵人參考源碼完結 前言 有限狀態機以前的我嗤之以鼻,現在的我逐幀分析。其實之前我就了解過有限狀態機&…

2.(vue3.x+vite)調用iframe的方法(vue編碼)

1、效果預覽 2.編寫代碼 (1)主頁面 <template><div><button @click="sendMessage">調用iframe,并發送信息

【udp報文】udp報文未自動分片,報文過長被攔截問題定位

問題現象 某局點出現一個奇怪的現象&#xff0c;客戶端給服務端發送消息&#xff0c;服務端僅能收到小部分消息&#xff0c;大部分消息從客戶端發出后&#xff0c;服務端都未收到。 問題定位 初步分析 根據現象初步分析&#xff0c;有可能是網絡原因導致消息到服務端不可達&a…

【C語言】文件的順序讀寫

©作者:末央&#xff06; ©系列:C語言初階(適合小白入門) ©說明:以凡人之筆墨&#xff0c;書寫未來之大夢 目錄 前言字符輸入輸出函數 - fgetc和fputc文本行輸入輸出函數 - fgets和fputs格式化輸入輸出函數 - fscanf和fprintf 前言 對文件數據的讀寫可以分為順序…

Unity3D 打造基于AStar的尋路與導航詳解

在游戲開發中&#xff0c;尋路與導航是一個至關重要的功能&#xff0c;它能夠使游戲角色自動找到最優路徑&#xff0c;避開障礙物&#xff0c;實現自動導航&#xff0c;從而提升游戲體驗。AStar&#xff08;A*&#xff09;算法作為一種廣泛應用的尋路算法&#xff0c;因其高效性…

關于多線程的使用方法

多線程在python中應用比較廣泛&#xff0c;但是因為python中有GIL鎖的緣故&#xff0c;在多線程中看起來是并發的執行的&#xff0c;在宏觀上是并發執行的&#xff0c;但是在微觀上是一個接著一個執行。 在python中使用多線程比較簡單&#xff0c;是一套固定的模版。 from qu…

PHP利用GD庫實現圖片合成功能方法

在程序項目開發的過程中我們免不了要實現一種功能。例如海報的生成&#xff0c;照片和文字合成一張新的圖片。php中怎么實現 實現功能 文字和照片合成一張新的照片&#xff0c;并且自適應換行并加上簽名和日期&#xff0c;加上字體樣式&#xff0c;下面我們就開實現該功能 實現…

Seal^_^【送書活動第8期】——《ChatGLM3大模型本地化部署、應用開發與微調》

Seal^_^【送書活動第8期】——《ChatGLM3大模型本地化部署、應用開發與微調》 一、參與方式二、本期推薦圖書2.1 作者建語2.2 編輯推建2.3 圖書簡介2.4 前 言2.5 目 錄 三、正版購買 大模型領域 既是繁星點點的未知宇宙&#xff0c;也是蘊含無數可能的廣闊天地&#xff0c; 正…

深入理解 Linux 內核架構

目錄 引言內核概念Linux 內核的基本組成 進程管理內存管理文件系統設備驅動網絡棧內核結構 內核態與用戶態內核模塊系統調用中斷與異常處理內核同步機制Linux 內核使用場景常用的內核命令與工具內核調試與性能優化總結 1. 引言 Linux 內核是現代計算機系統的核心組件之一&am…