MySQLのバージョンによる機能の違いについて
MySQLについて、簡単に
- MySQLは世界で最も普及しているオープンソースのRDSMS. リポジトリはこちら.
- MySQLはSQLパーサとストレージエンジンが分離していて、用途に応じたストレージエンジンを採用することができる。
MySQLのバージョンについて
ex)MySQL5.1.30という表記をした場合
-
最初の数字(ex. 5)がメジャーバージョンおよびファイル形式を表す。特定のメジャーバージョンでファイル形式は変わらない。
-
2番目の数字(ex. 1)がリリースレベルで、バージョンアップにはメジャーな機能の追加や旧バージョンとのマイナーな非互換性が含まれる。
-
3番目の数字(ex. 30)は、新しいリリース毎に数が増える。バージョンアップにはリリースレベルでの安定性の改善が含まれる。
-
リリース名には、リリースの安定性を占めるサフィックスが含まれることがある。サフィックスがない場合、GAリリースとなる。
参考: MySQL公式リファレンス
歴史
- 2001 MySQL3.23が最初のプロダクションリリース.
- 2003 MySQL4.0がリリースされる.
- 2005 MySQL5.0がリリースされる.
- 2008 MySQL5.1がリリースされる(5.1.30よりGA).
- 2010 MySQL5.5がリリースされる(5.5.8よりGA).デフォルトのストレージエンジンがMyISAMからInnoDBになる.
- 2013 MySQL5.6がリリースされる(5.6.10よりGA).InnoDB、NoSQLの機能強化.
- 2015 MySQL5.7がリリースされる(5.7.9よりGA).レプリケーション機能の拡充やInnoDBの改善、パフォーマンス改善など.
- 2018 MySQL8.0がリリースされる(8.0.11よりGA).
サポート
- オープンソース版のMySQL Community Editionでは4以前のバージョンはサポートが終了している.
- AWSのRDSでは2020年にMySQL5.6のサポートが終了している.
MyISAMとInnoDBについて
- MyISAMはシンプルな設計ゆえに高速であるが単純なデータ構造やリレーション、クエリを想定している.
- MyISAMは外部キー制約をサポートしていないが、innoDBはサポートしている.
- MyISAMはテーブルレベルの排他ロックしか実行できないのに対して、InnoDBは行レベルで共有ロックと排他ロックが組み合わされる.
- MyISAMではACIDなトランザクションが実装されていないのに対して、InnoDBでは実装されている.
- MyISAMでは、テーブルのキャッシュ管理をOSに任せているのに対して、InnoDBでは管理者が動的変数innodb_buffer_pool_sizeで設定することができる.
MySQL5.5 -> MySQL5.6
- GTID(Global Transaction ID)によって、マスタ-レプリケーション構成の時にトポロジー全体でユニークなIDがトランザクションに与えられる.
- パラメータのデフォルト値が変わり、デフォルト設定で優れたパフォーマンスが出るようになった. back_log(未解決の接続要求の上限)の値が、max_connectionsの値に比例して自動で調整される、など.
- カーネルmutexを分割することによる競合の軽減、フラッシュ操作の効率改善などのInnoDBのパフォーマンス改善.
- InnoDBのページサイズを、インスタンス作成時にパラメータとして設定できるようになった。ワークロードの性質に応じたページサイズにチューニングできる.
など
MySQL5.6 -> MySQL5.7
-
パフォーマンスがMySQL5.6の3倍になったとされる.
-
マルチソースレプリケーション(マスタ-スレーブ構成で複数マスタの選択が可能)機能が追加される.
-
InnoDBのバッファプールサイズをオンラインで変えられるようになったり、オンラインでインデックス名を変えられるようになったり、InnoDBが改善された.
-
クエリの最適化に使える機能が追加された.
-
パスワードの有効期限が設定できるようになったり、DB管理者がユーザアカウントをロックできるようになったり、セキュリティが向上した.
など
MySQL5.7 -> MySQL8.0
- パフォーマンスがMySQL5.7より2倍高速になったとされる.
- デフォルトのキャラクタセットがutf8mb4になった.
- SQLを関数のように定義してネーミングすることで、複雑なSQLをシンプルなSQLを組み合わせて構築することができるCTE(Common Table Expression)という機能が追加された.
- コマンドラインからmysqldの再起動をまたいで永続的に反映されるパラメータ設定ができるSET PERSIST構文が追加された.
- mysqldの起動や停止をクライアント接続で行えるようになった.
- Window関数が実装された.
- JSON関連の機能が拡充された
など
参考:
MySQL 5.6 リファレンスマニュアル2.11.1.3 MySQL 5.5 から 5.6 へのアップグレード
MySQL 5.7 Reference Manual 2.11.3 Changes in MySQL 5.7