埋在MySQL資料庫應用中的17個關鍵問題!

2022-07-01 04:15:09 字數 2975 閱讀 6944

mysql的使用非常普遍,跟mysql有關的話題也非常多,如效能優化、高可用性、強一致性、安全、備份、集群、橫向擴充套件、縱向擴充套件、負載均衡、讀寫分離等。要想掌握其中的精髓,可得花費不少功力,雖然目前流行的mysql替代方案有很多,可是從最小成本最容易維護的角度而言,mysql還是首選。下面從應用場景的角度切入,對mysql的技術點進行組織,寫乙份知識圖譜,方便進行更深入的學習和總結。

如下圖整理,我試著把mysql的應用場景分為6種,每種場景下需要考慮的重點問題不一樣,從而引出不同問題點下需要補齊的知識點,後續繼續基於這些知識點進行學習和整理。

1. 單master

單master的情況是普遍存在的,對於很多個人站點、初創公司、小型內部系統,考慮到成本、更新頻率、系統重要性等問題,系統只依賴乙個單例資料庫提供服務,基本上已經滿足需求。這種場景下我覺得重點應該關注的話題有上圖所示的四點。

其中最重要的環節是資料備份,如果是交易量非常低,並且具有非常明確的服務時間段特性的話,簡單的mysqldump是可以勝任的。但是這是有缺陷的,資料還原之後注定從備份點到還原點之間的資料會丟失。然而在極多數的情況下,備份的工作是沒法馬虎的,如下列舉的幾點小細節,下學期將分享更多操作性的文章。

1)冷備:停機,直接copy物理檔案,innodb引擎(frm檔案、共享表空間檔案、獨立表空間檔案、重做日誌檔案、my.cnf)。

恢復:把檔案copy到對應目錄。

2)熱備:ibbackup或者xtrabackup工具,記錄重做日誌檔案檢查點的lsn,copy共享表空間檔案以及獨立表空間檔案(不產生任何阻塞),記錄copy後重做日誌檔案檢查點的lsn,copy備份是產生的重做日誌。

恢復:恢復表空間檔案,應用重做日誌檔案。

3)溫備:mysqldump,--single-transaction引數進行事務管理保證資料一致性。備份時不能用ddl語句。恢復:直接執行檔案,mysql –uroot –p 《檔名.sql>

二進位製半同步複製,主從伺服器增量複製

恢復:mysqlbinlog

2. 一主一從

考慮一主一從的多數初衷是系統效能和系統高可用性問題,除了單master場景中的備份工作需要做好以外,還有效能優化、讀寫分離、負載均衡三項重點工作需要考慮。其中效能優化的內容比較多,也是一塊大主題,要從系統的服務指標作為依據採取相應的動作,多數系統要求的是3秒內完成請求,總體換算下來,資料庫大概可以有1.5秒的總執行時間,能滿足這個效能要求就是合理的優化方案。下學期以這樣的優先順序來分別整理內容:索引優化 -》 表設計優化 -》資料庫配置優化 -》硬體優化。

讀寫分離和負載均衡的實現相對簡單些,我目前維護的系統比較落後,沒有做讀寫分離,因為是一套以報表類功能為主的系統,而負載均衡是依賴php**來做的,從實際運維效果來看,不大理想,而且負載均衡的**過分嵌入到業務邏輯**中,給**維護帶來一定噪音。下學期計畫對各種中介軟體進行實踐和效能測試,到時候把一些測試資料分享出來。

3. 一主n從

一旦開始考慮一主多從的伺服器架構,則證明你的系統對可用性、一致性、效能中一種或者多種的要求比較高。好多系統在開始搭建的時候都會往這個方向看齊,畢竟這樣「看起來」系統會健壯很多。不過其實並不能單單依靠mysql的配置和mysql自帶的中介軟體來解決可用性、一致性方面的問題。

4. 橫向集群

系統龐大到需要分庫分表,其實是一件可喜可賀的事情,但是切記的是要前面提到效能優化工作做到極致之後才好考慮這些會增加系統複雜度的解決方案。橫向集群主要是從業務特性的角度對系統進行切分,最徹底就是切分成了各個子系統,子系統之間通過一些資料同步的方案來把一些核心資料進行共享,以避免跨庫呼叫跨庫join。

然後是各種系統介面呼叫,把大事務拆成小事務,事務之間做好隔離和同步。上圖中的三個問題在橫向集群的架構體系中應屬於很有特色的問題,在實際專案中其實是盡量去避免這些需求的存在的,不過如果確實需要了,也得有解決方案。下學期也將針對這些問題進行逐一整理,並測試一下一些號稱支援這些功能的中介軟體。

5. 縱向集群

橫向集群的切分思路最終是切分子系統,而縱向集群最後遇到的最棘手的問題是擴縮容,我運維的乙個系統是提前對資料做了256個切片,256切片中0~127切片和128~255切片分別存在兩個一主兩從的資料庫集群中,系統運維了3年多,目前還沒有擴容需求。設計初衷應該是考慮得到,假設有一天資料量非常大,可以把256個切片分4大片,分別儲存到4個一主兩從的集群中,從而實現擴容。

這個思路的確是可取的,只是我們的分庫邏輯當前是php**實現,也有一定程度上影響了業務**的邏輯,運維起來有點心驚膽戰,還是保持業務**清爽比較好。

下學期將介紹一些實現了庫路由功能的中介軟體的使用,也根據實際情況把想到的一些擴縮容方案實踐一遍,敬請期待實操效果的分享。

6. 混合模式

與其說這部分內容討論上面5種場景的混合,不如說這部分內容是做總結。上面的5種場景中,一共列舉了17個問題點,這17個問題點基本上都是疊加式的,越往深入的框架去做就越需要考慮齊這17個問題點。17個問題點考慮全了,混合模式下的問題就不成問題了。

MySQL資料庫應用

primary key 約束唯一標識資料庫表中的每條記錄。主鍵必須包含唯一的值。主鍵列不能包含 null 值。每個表都應該有乙個主鍵,並且每個表只能有乙個主鍵。create table persons id p int not null,lastname varchar 255 not null,f...

MySQL資料庫8 資料庫中函式的應用詳解

資料庫中內建函式的使用 該篇主要介紹資料庫中內建函式的使用,主要有日期函式,字串函式,數學函式。一osuiofqem 日期函式 select current date 獲得當前日期,年月日 select current time 獲得當前時間,時分秒 select current timestamp...

mysql資料庫中的 MySQL資料庫中定義

定義資料表 假如某個電腦生產商,它的資料庫中儲存著整機和配件的產品資訊。用來儲存整機產品資訊的表叫做pc 用來儲存配件供貨資訊的表叫做parts。在pc表中有乙個字段,用來描述這款電腦所使用的cpu型號 在parts表中相應有乙個字段,描述的正是cpu的型號,我們可以把它想成是全部cpu的型號列表。...