一、MySQL前世今生

weixin_33912246發表於2017-07-24
6748624-242d960eb70e91a2.jpg
圖片來自網路

文/Bruce.Liu1

文章大綱

  1. MySQL簡介
    1.1. MySQL之父
    1.2. MySQL歷史
  2. MySQL現狀及應用
    2.1. 全球資料庫排行
    2.2. 全球最大網站Top20
    2.3. 國內MySQL行業應用
    2.4. top 3資料庫對比
    2.5. 開源資料庫對比
  3. MySQL主流分支
    3.1. MySQL
    3.2. Percona
    3.3. MariaDB
  4. MySQL體系結構簡介
    4.1. MySQL邏輯概念
    4.2. MySQL儲存結構
    4.3. MySQL檔案結構

1.MySQL簡介

1.1.MySQL之父

關於MariaDB、MySQL、MaxDB名字的由來,這裡有個不得不說的小插曲。Monty有一個女兒,名叫My,因此他將自己開發的資料庫命名為MySQL。Monty還有一個兒子,名為Max,因此在2003年,SAP公司與MySQL公司建立合作伙伴關係後,Monty又將與SAP合作開發的資料庫命名為MaxDB。而現在的MariaDB中的Maria是Monty小孫女的名字。

6748624-554af6456b1a10c6.jpg
圖片來自網路

Michael “Monty” Widenius, 1962年3月3日出生於芬蘭赫爾辛基。

開源 MySQL資料庫的創始成員、MySQL AB公司的技術長、MySQL資料庫第一行程式碼的作者、MySQL資料庫命名人、MariaDB創始人兼技術長;獨自完成撰寫MySQL資料庫伺服器端95%的程式碼。

1.2.MySQL歷史

MySQL的海豚標誌的名字叫“sakila”,它是由MySQL AB的創始人從使用者在“海豚命名”的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字

MySQL的歷史可以追溯到1979年。當時Allan Larsson和Michael Widenius(Monty)開了一家自己的諮詢公司,取名TcX,名字的由來已無從考證。有道是"前世盡付真情,今生亦現福緣積厚"。那年一個夜黑風高的晚上,Michael基於BASIC語言寫出了他的第一款資料庫報表工具UNIREG

有當年的天氣記錄為證,Michael寫完該工具時極光異常明亮,炫彩無比。大凡重大事情的發生,後來的著述人都會記錄有一些類似的怪現象。比如颳風、下雨、冒仙氣什麼的,還有天上星星異常閃爍等等,反正就是說明這種事情很不簡單。

最初的UNIREG是執行在瑞典人制造的ABC800計算機上的。ABC800的記憶體只有32KB,CPU是頻率只有4MHz的Z80。在1983年Monty遇到了David Axmark,兩人相見恨晚,開始合作運營TcX,Monty負責技術,David搞管理。後來TcX將UNIREG移植到其他更加強大的硬體平臺,主要是Sun的平臺。

6748624-7c6f318027f68733.jpg
圖片來自網路

一次Monty接到了一個專案,需要為當時的UNIREG提供更加通用的SQL介面,Monty找到了David Hughes --mSQL的發明人,商討合作事宜。然而,經過一番測試後,他們發現mSQL的速度並不盡如人意,無法滿足客戶的需求。

遇到這種問題,程式設計師出身的Monty無法委曲求全,毅然採取了革命性的態度--重新設計整個系統。1995年5月23日,MySQL的第一個內部版本發行了,並在第二年對外公佈了MySQL官方正式發行版(3.11.1)。有趣的是,第一個MySQL正式版恰巧只能執行在Sun Solaris上,彷彿昭示了它日後被Sun收購的命運。

在接下來的兩年中,MySQL被移植到不同的平臺,同時加入了不少新的特性。到1998時,MySQL能夠執行在10多種作業系統之上,其中包括應用非常廣泛的 FreeBSD、Linux、Windows 95和Windows NT等。很快MySQL 3.22也釋出了,但它仍然存在很多問題--如不支援事務操作、子查詢、外來鍵、儲存過程和檢視等功能。正因為這些缺陷,當時許多Oracle和SQL Server的使用者對MySQL根本不屑一顧。

大概在1999的冬天,下了很大一場雪。然後獨立的商業公司MySQL AB就在瑞典的中部城市Uppsala成立了。並於同年釋出了包含事務型儲存引擎BDB的MySQL 3.23。在整合BDB儲存引擎的過程中,MySQL開發團隊得到了很好的鍛鍊,為後來能將InnoDB整合以及開發開放外掛式的儲存引擎架構打下了堅實的基礎。

MySQL從誕生之初就提供了雙重的授權標準:個人使用是免費的,如果用於商業網站搭建或者Windows平臺下就必須購買商業許可證。在2000年的時候MySQL做了一個重大的決定,改換成了GPL許可模式,也就是說商業使用者也無需再購買許可證,但必須把他們的原始碼公開。雖然MySQL AB因此在收入上遭受了巨大的打擊,損失了將近80%的收入,但他們依然堅持了GPL許可模式。

與此同時,芬蘭公司Heikki開始接觸MySQL AB,討論將Heikki的儲存引擎InnoDB整合到MySQL資料庫中的可行性。雙方的合作非常順利,並於2001年推出MySQL 4.0 Alpha版本。經過兩年的公開測試和應用,到了2003年,包含InnoDB的MySQL已經變得非常穩定了。隨即在同一年,MySQL推出4.1版,第一次使得MySQL支援子查詢,支援Unicode和預編譯SQL等功能。

MySQL 4.1還在Alpha版時,公司已決定並行開發5.0版。因為他們打算加快MySQL的開發速度以適應日益苛刻的市場需求。這個新版本是有史以來MySQL最大的變化,新增了儲存過程、服務端遊標、觸發器、查詢優化以及分散式事務等在大家看來一個"正常資料庫管理系統"應當擁有的一整套功能。

2008年2月,當時的業界開源老大Sun Microsystems動用10億美元收購了MySQL,造就了開源軟體的收購最高價。這次交易給開源交易設立了一個新的基準。在此之前的交易金額(JBoss、Zimbra、XenSource、Gluecode)從沒接近過10億美元,全部加起來才差不多與Sun Microsystems購買MySQL的花費持平。MySQL被收購之後,MySQL圖示停止使用,取而代之的是Sun/MySQL圖示。

MySQL和Sun合併之後,推出了MySQL 5.1GA版和MySQL 5.4 Beta版。5.4的推出照搬了4.1和5.0當時的開發模式,讓5.4和6.0並行處於Beta開發階段。

螳螂捕蟬,黃雀在後。2009年,資料庫老大Oracle大筆一揮,開出74億美元的支票,將Sun Microsystems和MySQL通盤收於旗下。

這裡附帶說明一下Drizzle,它是Sun/MySQL的Brian在2008年提出的一個計劃。目標是將開發一個更小、更輕、更快的資料庫,用作雲端計算(Cloud Computing)和Web應用的基礎架構。

標誌性事件

  • 1999年,MySQL AB在瑞典正式宣佈成立。
  • 2000年,ISAM華麗轉身MyISAM儲存引擎。同年MySQL開放了自己的原始碼,並且基於GPL許可協議。同年9月innoDB推出。
  • 2003年,MySQL4.0釋出,正式整合innodb
  • 2005年,MySQL 5.0釋出。同年Oracle把InnoDB引擎的開發公司innobase收購完成。MySQL明確地表現出邁向高效能資料庫的發展步伐。
  • 2006年,sun公司收購了MySQL公司,出價10億美元。
  • 2009年,Oracle公司收購sun,將MySQL納入囊中。
  • 2010年,MySQL 5.5正式版釋出,Oracle完成了大量改進,並將innodb改成預設引擎。
  • 2013年,MySQL 5.6 GA版本釋出。
  • 近期 - MySQL 5.7 GA版本橫空出世,其效能、新特性、效能分析帶來了質的改變。

2.MySQL現狀及應用

2.1.全球資料庫排行

DB-Engines通過以下6個方面的統計資料來綜合評估各個資料庫產品得分並給出綜合排名(https://db-engines.com/en/ranking):

  1. 資料庫相關網站數量(當前通過google、bing、yandex搜尋引擎統計)
  2. 公眾關注度(通過Google trends計算)
  3. 技術討論活躍度(通過Stack Overflow,DBA Stack Exchange問答及使用者統計)
  4. 招聘職位(通過Indeed、Simply Hired統計)
  5. 專業檔案(通過LinkedIn、Upwork統計)
  6. 社交網路資訊(通過Twitter統計)
6748624-5a46d21343aaad19.png
圖片來自網路
6748624-fd208a564bc5139e.png
圖片來自網路

2.2.全球最大網站Top20

6748624-f4f563308424d943.png
圖片來自網路
  • Facebook.com
  • Google.com
  • YouTube.com
  • Yahoo.com
  • WIKipedia.org - 維基百科
  • Live.com – 微軟新的電子郵件服務
  • qq.com – 騰訊
  • Microsoft.com – 微軟產品/更新/下載
  • Baidu.com – 百度
  • Msn.com – 微軟自有網際網路資訊
  • Blogger.com – 部落格平臺
  • ASK.com - 搜尋引擎
  • Taobao.com 淘寶
  • Twiter.com – 實時通訊平臺
  • Bing.com – 必應
  • Sohu.com – 搜狐
  • Apple.com – 蘋果
  • WrodPress.com – 成行經歷
  • Sina.com – 新浪
  • Amazon.com-亞馬遜

2.3.國內MySQL行業應用

6748624-627cfabc5ad5bf75.png
圖片來自原創

2.4.top 3資料庫對比

6748624-b431eb07e57a9049.png
圖片來自原創
  • MySQL
    開源軟體
    適用於OLTP場景
    伺服器數量大
    主要應用於網際網路行業

  • Oracle
    商業資料庫
    適用於OLTP/OLAP場景
    基於IOE架構模式
    傳統行業的霸主

  • SQL Server
    商業資料庫
    適用於OLTP/OLAP場景
    只能執行在Windows環境下
    國外SQL Server應用場景

2.5.開源資料庫對比

去IOE的時代,就曾經聽說過,開源資料庫PG能夠相容95%的ORACLE程式碼。這麼多年過去了。
雖然各種號稱PG資料庫各方面都很強。但從實際的全球最大網站TOP20來看主力依舊是MySQL。

6748624-fbbd4ec7d814ec3b.png
圖片來自原創

3.MySQL主流分支

儘管MySQL是最受歡迎的程式之一,但是許多開發人員認為有必要將其拆分成其他專案,並且每個分支專案都有自己的專長。該需求以及Oracle對核心產品增長緩慢的擔憂,導致出現了許多開發人員感興趣的子專案和分支。本文將討論受人們關注的三個流行MySQL分支:Drizzle、MariaDB和Percona Server(包括XtraDB引擎)

3.1.MySQL

官方MySQL,前身MySQL AB / SUM/最後被Oracle公司收入麾下。

3.2.Percona

Percona Server就是這樣一款產品,由領先的MySQL諮詢公司Percona釋出。Percona Server是一款獨立的資料庫產品,為使用者提供了換出其MySQL安裝並換入Percona Server產品的能力。通過這樣做,就可以利用XtraDB儲存引擎。Percona Server聲稱可以完全與MySQL相容,因此從理論上講,您無需更改軟體中的任何程式碼。這確實是一個很大的優勢,適合在您尋找快速效能改進時控制質量。因此,採用Percona Server的一個很好的理由是,利用XtraDB引擎來儘可能地減少程式碼更改。

此外,他們是XtraDB儲存引擎的原作者。Percona將此程式碼用作開原始碼,因此您可以在其他產品中找到它,但引擎的最初建立者與編寫此產品的是同一個人,所以您可以隨心所欲地使用此資訊。

Percona團隊的最終宣告是“Percona Server是由Oracle釋出的最接近官方MySQL Enterprise發行版的版本”,因此與其他更改了大量基本核心MySQL程式碼的分支有所區別。Percona Server的一個缺點是他們自己管理程式碼,不接受外部開發人員的貢獻,以這種方式確保他們對產品中所包含功能的控制。

下面是Percona Server的宣告,該宣告來自它們自己的網站:

  • 可擴充套件性:處理更多事務;在強大的伺服器上進行擴充套件
  • 效能:使用了XtraDB的Percona Server速度非常快
  • 可靠性:避免損壞,提供崩潰安全(crash-safe)複製
  • 管理:線上備份,線上表格匯入/匯出
  • 診斷:高階分析和檢測
  • 靈活性:可變的頁面大小,改進的緩衝池管理

3.3.MariaDB

MySQL之父Widenius先生離開了Sun之後,覺得依靠Sun/Oracle來發 展MySQL,實在很不靠譜,於是決定另開分支,這個分支的名字叫做 MariaDB;

在賣出MySQL之後Widenius發現兩個主要問題:

  • MySQL核心開發團隊是封閉的,完全沒有Oracle之外的成員參加。很多高手即使 有心做貢獻,也沒辦法做到
  • MySQL新版本的釋出速度,在Oracle收購Sun之後大為減緩。Widenius用資料比 較了收購之前和之後新版本的釋出速度。有很多bugfix和新的feature,都沒有及 時加入到釋出版本之中

目標是提供一個由社群開發的、穩定的、總是免費的MySQL分支,在用 戶級別上相容主流版本。我們為自己的版本和上游、社群版的互操作性 提高而努力;Monty Program公司承諾MariaDB將會一直保持獨立和開源。值得一提的是,Fedora 及OpenSUSE Linux更宣佈將在MariaDB推出下 一個版本後拋棄MySQL使用MariaDB。

MariaDB提供了MySQL提供的標準儲存引擎,即MyISAM和InnoDB。因此,實際上,可以將它視為MySQL的擴充套件集,它不僅提供MySQL提供的所有功能,還提供其他功能。MariaDB還聲稱自己是MySQL的替代,因此從MySQL切換到MariaDB時,無需更改任何基本程式碼即可安裝它。

最後可能也是最重要的一點是,MariaDB的主要建立者是Monty Widenius,也是MySQL的初始建立者。Monty成立了一家名為Monty Program的公司來管理MariaDB的開發,這家公司僱傭開發人員來編寫和改進MariaDB產品。這既是一件好事,也是一件壞事:有利的一面在於他們是Maria功能和bug修復的佼佼者,但公司不是以贏利為目的,而是由產品驅動的,這可能會帶來問題,因為沒有贏利的公司不一定能長久維持下去。

4.MySQL體系結構簡介

4.1.MySQL邏輯概念

6748624-63704bb52ed8c1cf.png
圖片來自網路
  • 連線層
    通訊協議的處理、執行緒處理、網路許可權、賬號認證等

  • 處理層
    許可權處理、結果快取(Query cache)、查詢解析、優化器、查詢執行、返回等

  • 儲存層
    用於持久化處理層的資料,innodb、MyISAM、Memory、Heap

4.2.MySQL儲存結構

  • 例項
    由資料庫後臺程式/執行緒以及一個共享區域組成(程式的概念),資料庫例項是用來運算元據庫檔案的

  • 資料庫
    資料庫(資料庫檔案)是一個或者一組二進位制檔案,通常來說存在與檔案系統之上

  • 單程式多執行緒結構
    不會影響MySQL的效能,看程式如何寫。(多程式程式,程式間通訊開銷大於多執行緒)

  • 儲存引擎的概念
    可以理解成檔案系統,例如FAT32, NTFS, EXT4。 一個表是一個分割槽,引擎就是分割槽的檔案系統
    儲存引擎的物件就是表

  • 邏輯儲存結構
    instance
    database
    schema
    tablespace
    table

4.3.MySQL檔案結構

6748624-3d18669c51a21de9.png
圖片來自原創
  • MySQL配置檔案
    my.cnf

  • 表結構的組成
    表結構定義檔案:frm
    innodb資料檔案:ibd
    MyISAM資料檔案:myi
    共享表空間檔案:ibdata*

  • error log(錯誤日誌)
    error_log

  • binary log(二進位制日誌)
    記錄資料庫寫入操作的日誌,可以用於備份恢復後者是master/slave 的複製
    log_bin
    log_bin_index
    log_bin_basename

  • slow query log(慢日誌)
    將執行超過某一個時間戳的閾值的SQL語句記錄到檔案
    slow_query_log
    slow_launch_time
    slow_query_log_file

  • general log(常規日誌也叫全量日誌)
    開啟後將記錄所有連結到MySQL任何的操作
    general_log
    general_log_file

  • relay-log(中繼日誌)
    io_thread 從master讀到的日誌寫到中繼日誌中,供sql_thread執行完,已完成複製成功
    relay_log=relay-bin

  • innodb redo log
    5.6之前redo log 個數總大小不能超過4G
    5.6.之前redo log的大小不能更改,變更後資料器啟動失敗
    innodb_log_group_home_dir=/data01/mysql/mysql3306/logs
    innodb_log_file_size=200M
    innodb_log_files_in_group=3

掃描下方二維碼關注本人微訊號!歡迎大家交流學習!

6748624-1dbc5faf10feded7.jpg
Bruce.Liu

相關文章