MySQLの歴史が面白い

# まえがき

MySQLの歴史をまとめました。
若干関係ない話題も書いてるかもしれませんが読んでいただけると幸いです。
（初投稿なので温かい目でみてください。。。）

# TL;DR
(1995年)
Michael WideniusらによってMySQLが開発される。

(2001年)
開発会社MySQL ABのCEOがMårten Gustaf Mickosに変わり、MySQLがオープンソース化される。

(2008年)
MySQLがサンマイクロシステムズによって買収される。

(2009年)
Michael Widenius「こんなバグまみれのバージョン(5.1)リリースするなら抜けます」

「生みの親」Michael WideniusがサンマイクロシステムズのMySQL開発チームを脱退。
　→Michael Wideniusが独立した会社でMariaDBをリリース。
　（ちなみに「My」はWidenius氏の長女の名前、「Maria」は彼の次女の名前が由来である。）

企業の買収合戦、権利関係複雑化のいざこざの中で、
様々なバージョンのMySQLが乱立する。
（そしていくつかのバージョンは幻と消える・・・）

(2010年～)
Oracleがサンマイクロシステムズを買収する。
これによりMySQL関連技術はすべてOracle傘下となり、
買収合戦、権利をめぐる混乱は終結を迎える。

(現在)
開発プロセスが見直され、MySQLの進化のスピードが爆速になり、日々発展し続けている。

# MySQLの歴史

### MySQL3.23以前
1995年 Michael Widenius、David Axmark、Allan LarssonによってMySQL ABが創立
1995年5月23日 - 内部的にMySQLの最初のバージョンがリリース。（Solaris向け）
1996年10月 - バージョン3.19リリース。Linux向けに移植されたバージョンである。

1998年1月8日 - 最初のWindows版がリリース。Windows 95やNT向け。

2001年にMySQL AB社のCEOがMårten Gustaf Mickosに代わるまで、
独自ライセンスでMySQLの開発が行われた。
オープンソース化はされておらず、一部ユーザに向けて開発されていた。

参照
   https://qiita.com/shotaTsuge/items/f4997d6d715822f7eb1a
   https://en.wikipedia.org/wiki/M%C3%A5rten_Mickos


### MySQL3.23 リリース
2001年1月
MySQL AB社のCEOがMårten Gustaf Mickosに代わり、MySQLのライセンスがMySQL独自のものからGPLv2へと変更された。
このライセンス変更により、プログラムの実行に関しては完全に自由となった。

このことでMySQL利用の敷居が下がり、MySQLが普及するきっかけとなった。

「マスター上で実行したSQLと同じSQLをスレーブでも実行する」というシンプルな
コンセプトのレプリケーションはこのバージョンから始まった。


#### ストレージエンジンの変更 
 - MyISAMストレージエンジンの搭載
 - ディスクへのアクセスをしないHEAPストレージエンジン
 - 多数のテーブルを束ねるMERGEストレージエンジン
 - InnoDBとの融合

#### 全文検索のサポート
 - ただし全文検索機能を使用できるのはMyISAMストレージエンジンのみ。


### MySQL4.0 リリース
2003年3月

ACID準拠のトランザクションが利用可能なRDBMSとしてリリース。

 - UNION句の実装
 - SSL接続の実装

このバージョンから、
レプリケーションがIOスレッドとSQLスレッドに分かれるようになり、
スレーブの遅延が大幅に改善した。

### MySQL4.1 リリース
2004年10月

文字列の取り扱いが大きく変わり、MySQL4.0からの移行作業にやや大きな混乱がもたらされた。

プリペアドステートメントが実装されたことで、Webアプリケーションの利用に十分な機能が備わった。
このバージョンにはストアドプログラムなどの高機能はないが、
極めて軽量な動作をするバージョンであったため、根強いファンが多かった。

 - Unicode(UTF-8)サポート
 - プリペアドステートメントの実装
 - サブクエリ（副問い合わせ）の実装


### MySQL5.0 リリース
2005年10月

一部企業が利用することを想定し、エンタープライズ向けの機能が盛り込まれた。

変更点が多かった分、正式版のリリースは不安定なものとなった。

この後、次のバージョン（MySQL5.1）のリリースまで3年以上もかかることになり、長く使われるバージョンとなった。

 - ストアドプロシージャ
 - ストアドファンクション
 - トリガー
 - ビュー
 - XAトランザクション
 - informationスキーマ
 

### Oracle、オープンソースソフト企業のInnobase買収
2005年10月7日

MySQL3.23以降、ストレージエンジンをInnoDBの開発元であったInnobase OYが、Oracleに買収されてしまう。

当時のMySQLとOracleは対象とするユーザー層がまったく違っており、競合していなかったが、OracleがMySQLを競合と認識したしまえば、InnoDBが急遽使えなくなるかもしれないという懸念が浮上した。

参照
   https://www.itmedia.co.jp/enterprise/articles/0510/08/news012.html


## サンマイクロシステムズがMySQL ABを買収
2008年2月6日

1995年よりMySQLの開発をしていたMySQL ABを、サンマイクロシステムズが10億ドルで買収することになった。
サンマイクロシステムズにはPostgreSQLのサポートをしているJosh Berkus氏が所属しており、OSSのRDBMSの2台巨塔を一社がサポートする体制となる。

参照
   https://www.atmarkit.co.jp/news/200801/17/mysql.html

## サンマイクロシステムズがMySQL株式会社（MySQLの日本法人）を吸収合併
2008年7月1日

サンマイクロシステムズのMySQL株式会社買収をきっかけに、
MySQLの日本語環境が大幅に強化され、日本でのOSSRDBMS市場の拡大がなされた。

参照
   https://cloud.watch.impress.co.jp/epw/cda/topic/2008/07/01/13301.html

### MySQL5.1 リリース
2008年11月

サンマイクロシステムズ名義でリリースされる、唯一のバージョンとなった。

エンタープライズ向けの機能が強化されている。(以下一部抜粋)

 - パーティショニング
 - 行ベースレプリケーション
 - XML関数
 - イベントスケジューラ
 - ログテーブル
 - アップグレードプログラム(mysql_upgrade)
 - プラグインAPI

参照
   https://mag.osdn.jp/08/12/02/0454256

## MySQLの「生みの親」、サンを離れる
2009年02月05日

元MySQL ABのCTOで、MySQLの「生みの親」といわれるMichael Widenius氏がサンマイクロシステムズを退職した。

参照：https://www.atmarkit.co.jp/news/200902/05/monty.html

退職の理由はMySQL 5.1GA版のリリースタイミングや、Server版の開発などで、サン・マイクロシステム側と意見が食い違ったことなどが主な原因だという。

Michael Widenius氏はこれと同時にMonty Program Abを立ち上げ、のちにMySQLのフォークであるMariaDBをリリースする。
　（ちなみに「My」はWidenius氏の長女の名前、「Maria」は彼の次女の名前が由来である。）


## Oracle、MySQLに関する10の約束を発表
2009年12月14日

サンマイクロシステムズの買収を急ぐOracleが欧州委員会による承認を目指し、MySQLのコミュニティ版開発やベンダーによるAPI利用に関する具体的な"公約"を発表した。
（Oracle社の公式ページの当時の原文はすでにリンク切れになっている）

内容は、買収時点でのMySQLの有料サポートのユーザの取り扱いに関するものや、
MySQL Reference Manualを従来と同じ品質で引き続き無料提供することを約束することなど。

参照
   https://www.itmedia.co.jp/enterprise/articles/0912/14/news083.html

## Oracleがサンマイクロシステムズを買収
2010年1月27日

OracleがMySQLを買収したことにより、MySQLとInnoDBの開発チームが同じ会社となった。

Innobase OYは、Oracleの子会社として高機能版のInnoDBを独自に開発していたが、
このタイミングでOracleコーポレーションに吸収される。

参照
   https://japan.cnet.com/article/20407524/

### 幻のバージョン(1) MySQL5.2～5.4
MySQL5.1の次に出るバージョンは5.5である。
バージョン5.2とバージョン5.3は番号がスキップされ、次期バージョンとしてMySQL5.4が開発されていた。

ところが、Oracleによるサンマイクロシステムズの買収を受け、MySQLとInnoDB開発チームが一緒になったことから、
「InnoDB Pluginをビルドインにする」という新たな作業が追加されることになり、MySQL5.4はキャンセルされた。

### 幻のバージョン(2) MySQL6.X～7.X
これと同時期に、MySQL6.0というバージョンも計画されていた。
Oracleによる　Innobase OYの買収により、InnoDBが将来的に使えなくなることを懸念したMySQL開発チームは
「InnoDB」ではなく「Falcon」というストレージエンジンを搭載したMySQLを開発しようと考えていた。

ところが、その後MySQLとInnoDB開発チームが一緒になったことからこの懸念は払拭され、
ストレージエンジンにFalconを使用したMySQL6.0は幻となった。

（MySQL7.0も多分ストレージエンジン関係で幻のバージョンとなったのだと思うのですが詳しい方情報お願いします。。。）

追記

「MySQL 8.0 の薄い本」の著者hmatsu47さんから情報提供いただきました！
> バージョン 7.x は MySQL Cluster（InnoDB Cluster ではなくて NDB Cluster のほう）と重なるからスキップした、と聞いたことがあります。

調べたところ、決定的な公式の情報源こそ見つからなかったのですが、
技術ブログ「漢のコンピュータ道」に以下の記述がありました。
http://nippondanji.blogspot.com/2016/09/mysql-800-development-milestone-release.html

> なぜ7.0ではないのかというと、それはMySQL Clusterとかぶってしまうからという理由がある。MySQL Clusterの最新版は、7.4シリーズである。そこで、5.8の代わりにキリ良く5を取って8がメジャーバージョンになったわけである。

情報提供ありがとうございました。

### MySQL5.5 リリース
2010年12月15日

Oracleによる、サンマイクロシステムズ買収後初のメジャーバージョン。

このバージョンの目玉はInnoDB PluginによるビルドインInnoDBの置き換えである。
これにより、従来のバージョンとは一線を画したCPUスケーラビリティやI/O性能が出せるようになった。

#### CPUスケーラビリティの重要性

このタイミングでのCPUスケーラビリティの強化は、以下の2点から重要な意味がある。

 - CPU進化の方向転換

　実は、2006年頃を転機に、CPUの進化はクロック周波数ではなくコア数を増やす方向に進むことになった。（マルチコア化）
クロック周波数の上昇が、発熱や消費電力などの効率の壁に当たり、物理的な限界を迎えたためである。

 - ディスク装置の変遷

　従来はハードディスク上にデータを格納するしかなかったが、その後SSDが台頭しRDBMSにもSSDという選択肢が当たり前になった。
　その結果、ディスク書き込み／読み取りによる処理時間のボトルネックが大幅に緩和され、ますますCPUの処理の高速化が重要な意味を持つようになったのである。

#### 分散型バージョン管理の開始

また、同じころに分散型バージョン管理システムが広く利用されるようになったことから、
「個々の新機能を個別のブランチで開発し、完成してテストが十分になされたものからマージする。」
という現在の開発サイクルをこのバージョンで初めて取り入れた。
（当時のバージョン管理システムはBazaarというものが利用されたが、後にGitへと置き換えられた。）



### MySQL5.6 リリース
2013年2月5日

先述の開発サイクルの変更により、MySQLの進化は急激なものになる。
MySQL5.6になったことによる新機能についてはすべてを記述しきれないが、
主要なものから（個人的に気になるものを）一部抜粋する。

 - InnoDBの改善
    - InnoDB用の情報スキーマ導入
 - レプリケーション
    - フェイルオーバのためのGTID(Global Transaction ID)の導入
 - オプティマイザ
    - SELECT以外のクエリに対するEXPLAIN
    - オプティマイザトレース機能の追加
 - セキュリティの強化
    - SHA-256認証の導入（バージョン8.0～ではSHA-256認証がデフォルト）
 - パーティショニングの改良
    - EXCHANGE PARTITION（次のバージョンMySQL5.7でWithout Validationオプションが追加される。）
 - などなど

### MySQL5.7 リリース
2015年10月21日

MySQL5.6からMySQL5.7へのメジャーバージョンアップにより、おおよそ175もの機能が追加された。

個人的には全文検索機能、JSON型のサポートが大きい変化だと考えている。

#### 全文検索

全文検索はMySQL3.23で既にサポートを開始していたが、MySQL3.23当時のDBエンジンはMyISAMのみであり、
InnoDBでの全文検索は非対応であった。

英文のような空白で区切られる言語に対しての全文検索はMySQL3.23で既にサポートを開始していたが、
日本語のように空白を使用しない文章に対しての全文検索は特殊な方式で単語を抽出する必要があった。
これを解決する手段として、以下の２種類のパーサーが取り入れられた。
 - NGRAMパーサー　…　文字列をN文字ごとに区切ってフルテキストインデックスを作成する方法
 - MeCabパーサー　…　辞書を用いて文字列の文法を解析し、現れる単語を抽出する方法（形態素解析）

全文検索にどちらのパーサを使用するかは設定によって切り替え可能である。

#### JSONデータ型

JSON(JavaScript Object Notation)は、構造化したデータを表現するための記法の一つである。

JavaScriptベースで開発されるWEBフレームワークが人気を伸ばす一方で、
JavaScriptで扱いやすいJSON型を導入するRDBMSも増えてきていた。
ちなみにOSSのRDBMSとしてMySQLに対しての引き合いに出される、
PostgreSQLにおいてはバージョン9.2（2012/09/10リリース）ですでに導入されていた。

従来のRDBMSでは１つのドメイン（エクセルでいうセル）に対し、
複数のデータが混在する状況は正規化の観点からあまり好まれなかったが、
JSON型の登場により、より柔軟なデータ格納ができるようになった。

### MySQL8.0 リリース
2018年4月19日

MySQL5.7のリリースから2年半の時を経て、現在のメジャーバージョンであるMySQL8.0がリリースされる。

「MySQL5.7より最大2倍高速」とOracleが公式に銘打っているバージョンである。

このバージョンから、デフォルトの認証プラグインが変更されたので、
アプリケーションからMySQLにアクセスする際に従来のPDOを使用してしまうと
ユーザの認証がうまくいかず、沼にはまってしまった方も多いかと思う。
（ちなみに私もその一人です。）


MySQL8.0に関してはhmatsu47氏の「MySQL8.0の薄い本」にとても詳細に記載されているので
詳しく知りたい方は参照してみるとよいだろう。

参照
   「MySQL 8.0 の薄い本」を作って配っている話
   https://qiita.com/hmatsu47/items/ceb75caf46e3c761095d

以下にいくつか変更点を紹介しておく。（「MySQL8.0の薄い本」から抜粋）

#### 認証プラグイン

従来のMySQL Native Passwordプラグインに代わって、Caching sha2 Authenticationプラグインがデフォルトとなった。
これにより、より安全で高速な認証が可能になった。

先述の通り、認証方式の違いによる混乱があったが、その解決には以下の記事が参考になるので紹介しておく。

参照
   https://qiita.com/ucan-lab/items/3ae911b7e13287a5b917

#### CTE（Common Table Expressions；共通テーブル方式）

主たるSQLの問い合わせを実行するために補助的に使う一時テーブルを定義するもの。
WITHで記述を始めるのでWITH句とも呼ばれる。

ちなみに再帰CTEでは、cte_max_recursion_depthパラメータ（デフォルト設定では1000）の数字を超えるステップ数を持つ再帰SQLを発行しようとするとエラーになるので留意されたい。

参照
   https://yakst.com/ja/posts/4322



# あとがき

「他のデータベースでは普通にできるのにMySQLではできない！」などの問題はまだあるかもしれませんが、
現在のMySQLの進化のスピードはすさまじいものなので、ガンガン改善していくと思います。
なにより日本語の全文検索機能などのMySQLにしかできない機能があり、個人的に大好きなデータベースです！

歴史の大まかな流れは以下の書籍を参照させていただきました。

   詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド
   https://www.shoeisha.co.jp/book/detail/9784798147406

調査不足や事実誤認などありましたら遠慮なくバシバシ意見をお願いいたします。。。