MySQL

SQLデータベースエンジン

MySQL(まい・えすきゅーえる)は、オープンソースリレーショナルデータベース管理システム(RDBMS)である。その名前は、共同設立者のMichael Wideniusの娘の名前である「My」と、Structured Query Languageの略称である「SQL」を組み合わせたものである。

MySQL
MySQLadministrator1.png
Linux上で実行中のGUIフロントエンド MySQL Administrator
開発元 オラクルサン・マイクロシステムズ
初版 1995年5月23日 (1995-05-23)
最新版 8.0.20 - 2020年4月27日(2か月前) (2020-04-27[1][±]
最新評価版 [±]
リポジトリ github.com/mysql/mysql-server
プログラミング言語 C, C++
対応OS クロスプラットフォーム
種別 RDBMS
ライセンス GPL v2 または Commercial License
公式サイト www.mysql.com/jp/
dev.mysql.com
テンプレートを表示

MySQLは、GNU General Public Licenseの条件に基づいたフリーでオープンソースのソフトウェアであり、さまざまなプロプライエタリライセンスでも利用可能である。MySQLは、サン・マイクロシステムズ(現在のオラクル)に買収されたスウェーデンの企業MySQL ABが所有、出資していた。2010年にオラクルがサンを買収したとき、WideniusはオープンソースのMySQLプロジェクトをフォークしてMariaDBを作った。

MySQLは、LAMP Webアプリケーションソフトウェアスタック(LAMPは、LinuxApache、MySQL、Perl/PHP/Pythonの頭字語)のコンポーネントである。MySQLは、DrupalJoomlaphpBBWordPressなど、多くのデータベース駆動型Webアプリケーションで使用されている。MySQLは、FacebookFlickrMediaWikiTwitterYouTubeなど、多くの人気Webサイトでも使用されている。

概要編集

MySQLはCC++で書かれている。SQLパーサーはyaccで書かれているが、自家製の字句解析器を使用している。MySQLは、AIX、BSDi、FreeBSDHP-UX、eComStation、i5/OS、IRIX、Linux、macOSMicrosoft WindowsNetBSD、Novell NetWare、OpenBSDOpenSolaris、OS/2Warp、QNX、Symbian、SunOS、SCO OpenServer、SCO UnixWare、Sanos、Tru64など、多くのシステムプラットフォームで動作する。OpenVMSへのMySQLのポートも存在する。

MySQLサーバーソフトウェアとクライアントライブラリは、デュアルライセンス配布を使用している。これらはGPLバージョン2、またはプロプライエタリなライセンスで提供されている。

公式マニュアルからサポートを得ることができる。また、別のIRCチャネルやフォーラムでも無償サポートが提供されている。オラクルはMySQL Enterprise製品を通じて有償サポートを提供している。それらはサービスの範囲や価格がそれぞれ違っている。さらに、MariaDBやPerconaなど、サポートやサービスを提供するサードパーティ組織も多数存在する。

MySQLは肯定的なレビューを受けており、レビュー担当者はMySQLが「平均的なケースでは非常によく機能」し、「開発者向けのインターフェイスがあり、ドキュメント(Webサイトなどを通じた現実世界でのフィードバックは言うまでもなく)も非常に良い。」ことに気付いた。また、「高速で安定した真のマルチユーザ、マルチスレッドのSQLデータベースサーバ」としてもテストされている。

特徴編集

MySQLは、オープンソースのMySQL Community ServerとプロプライエタリのEnterprise Serverの2つの異なるエディションで提供される。[2] MySQL Enterprise Serverは、サーバープラグインとしてインストールされる一連の独自の拡張機能によって差別化されているが、それ以外は同じバージョン番号付けシステムを共有し、同じコードベースから構築される。

MySQL 5.6で利用可能な主な機能:

  • ANSI SQL 99の広範なサブセットと拡張機能
  • クロスプラットフォームのサポート
  • SQL / PSMに厳密に従う手続き言語を使用するストアドプロシージャ [3]
  • トリガー
  • カーソル
  • 更新可能なビュー
  • InnoDBストレージエンジンを使用する場合のオンラインデータ定義言語 (DDL)。
  • 情報スキーマ
  • 監視目的でサーバーの実行とクエリのパフォーマンスに関する統計を収集および集約するパフォーマンススキーマ。[4]
  • 実行時の動作を制御するための一連のSQLモードオプション。SQL標準に準拠するための厳密モードが含まれる。
  • X / Open XA 分散トランザクション処理 (DTP)サポート。この一環として、デフォルトのInnoDBストレージエンジンを使用した2フェーズコミット
  • デフォルトのInnoDB Storage Engineを使用する場合のセーブポイントを持つトランザクション。NDB Cluster Storage Engineはトランザクションもサポートする。
  • InnoDBおよびNDB Cluster Storage Engineを使用する場合のACIDコンプライアンス[5]
  • SSLサポート
  • クエリキャッシング
  • サブSELECT (ネストされたSELECT)
  • ビルトインされたレプリケーションサポート
    • 非同期レプリケーション:1つのマスターから多数のスレーブ[6][7]へのマスター/スレーブ、または1つのスレーブ[8]への多数のマスター
    • 準同期レプリケーション:マスターがレプリケーション時に待機するマスターからスレーブへのレプリケーション[9][10]
    • 同期レプリケーション: マルチマスターレプリケーションMySQL Cluster [11]にて提供されます。
    • 仮想同期 :マルチマスターサポートを備えたMySQLサーバーの自己管理グループは、Galera Cluster [12]または組み込みのGroup Replicationプラグイン[13]を使用して実行できる[14]
  • 全文索引付けおよび検索[注 1]
  • 組み込みデータベースライブラリ
  • Unicodeサポート[注 2]
  • オプティマイザーでパーティションをプルーニングしたパーティションテーブル
  • MySQL Clusterによる非共有クラスタリング
  • 複数のストレージエンジン。アプリケーションの各テーブルに最も効果的なストレージエンジンを選択できます。[注 3]
  • ネイティブストレージエンジンInnoDBMyISAM、マージ、メモリ(ヒープ)、フェデレーション、アーカイブ、CSV、ブラックホール、NDBクラスター。
  • グループ化をコミットし、複数の接続から複数のトランザクションを収集して、1秒あたりのコミット数を増やします。

開発者は、約2か月ごとにMySQL Serverのマイナーアップデートをリリースする。ソースは、両方ともGPLライセンスの下で、MySQLのWebサイトまたはMySQLのGitHubリポジトリから取得できる。

シェア編集

世界でもっとも普及しているオープンソースのRDBMSとして知られており[15]、市場シェアではPostgreSQLなどの他のオープンソース・データベースを圧倒している[16]。日本でも2009年になってPostgreSQLを超えるシェアを獲得している[17]。初期のMySQLで文字コードのサポートが悪かったのが影響したが、現在はEUC、SJIS、多言語面を含むUTF-8などをサポートしている。

利用企業数の割合
地域 MySQL PostgreSQL 調査機関
世界 82.1% 27.1% 451 Group (2009年)[18]
日本 60.5% 51.9% IPA (2009年)[17]

ストレージエンジン編集

データの保存とアクセスを行うストレージエンジンがSQLパーサとは分離独立しており、用途に応じたストレージエンジンを選択できる「マルチストレージエンジン」方式を採用している。

バージョン3.23.34以降で組み込まれているInnoDBストレージエンジンは、オープンソースソフトウェア企業のInnobase社が開発したストレージエンジンであり、高い堅牢性とMVCCによる高い並列性を兼ね備えており、あらゆるアプリケーションに対応出来る人気のストレージエンジンとなっている。InnoDBはMySQL本体やOSのクラッシュからの復旧(クラッシュリカバリ)をサポートしている。

また、InnoDB登場以前から搭載されているMyISAMストレージエンジンも検索が高速であり、更新よりも参照の頻度の高いWebアプリケーションなどで活用されている。全文検索や空間検索が利用できるのも、MyISAMの利点であったが最近のMySQLではInnoDBにおいてもそれらは利用できるようになっている。

以前はMyISAMの方が高速であったり多機能であると言われることが多かったが、InnoDBの性能・機能改善が進んだことから、高速性や多機能性を求めるためにMyISAMを利用するということも減ってきている。

トランザクション編集

MySQLでは、トランザクション管理はストレージエンジンの役割であり、トランザクションを利用したければ対応したストレージエンジンを使用すればよい。

InnoDBは、ACIDに準拠したトランザクションをサポートしている。一方MyISAMでは、トランザクションをサポートしていない。トランザクションが必要でないシーンは徐々に減ってきているので、最近MyISAMの出番も減りつつあるようである。

その他の機能編集

副次問い合わせ(サブクエリ)は、バージョン4.1以降でサポートされている。バージョン5.0以降では、SQL99にストアドプロシージャビュートリガーが実装され、機能の面でも他のRDBMSに追いつきつつある。またバージョン8.0ではウインドウ関数と共通表式(CTE: Common Table Expression)が実装された。

その他、標準でマスタスレーブ方式のレプリケーション機能を備えており、堅牢なデータストレージの構築が比較的容易である。 (MySQLはストレージエンジンに寄らないバイナリログ(旧:更新ログ)を実装しており、それを使った論理レプリケーション) MySQL 5.7.17以降、MySQL 8.xではグループレプリケーションの機能をプラグインでサポートしている。 また、本体+プラグインのGR(グループレプリケーション)とMySQL Shell, MySQL Routerを組み合わせたMySQL InnoDB Cluster構成も可能になった。

ライセンス編集

MySQLは GPLコマーシャルライセンスのデュアルライセンス方式で提供されている[19]。基本的に、MySQLのサーバ本体とクライアントライブラリはGPLで提供される。このため、MySQLを改造し、それを再頒布する場合は、GPLに従う必要がある。

GPLのクライアントライブラリを利用してMySQLに接続するアプリケーションを開発した場合、そのアプリケーションもGPLライセンスとしなければならない可能性がある。ただし、クライアントライブラリに関しては、アプリケーションが既定のオープンソースライセンスで公開されるのであれば、GPL以外のオープンソースライセンスで再頒布することも可能である[20]

サポートやツールが提供される有料サブスクリプションのMySQL Standard Edition, Enterprise Editionでは、コマーシャルライセンス版のバイナリが提供される[21]。コマーシャルライセンス版では、GPLによる制約は受けない。

歴史編集

  • 1995年5月23日 - 内部的にMySQLの最初のバージョンがリリース。
  • 1998年1月8日 - 最初のWindows版がリリース。Windows 95やNT向け。
  • 2001年1月 - Version 3.23 プロダクションリリース。ベータ版は2000年6月にリリース。
  • 2003年3月 - Version 4.0 プロダクションリリース。ベータ版は2002年8月にリリース。union搭載。
  • 2004年10月 - Version 4.1 プロダクションリリース。ベータ版は2004年6月にリリース。R木B木、サブクエリー、prepared statements搭載。
  • 2005年10月 - Version 5.0 プロダクションリリース(5.0.15よりGA)。ベータ版は2005年3月にリリース。cursors, stored procedures, triggers, views, XA transactions搭載。
  • 2008年2月6日 - サン・マイクロシステムズがMySQL ABを買収。
  • 2008年7月1日 - サン・マイクロシステムズ株式会社がMySQL株式会社(MySQLの日本法人)を吸収合併。
  • 2008年11月 - Version 5.1 プロダクションリリース(5.1.30よりGA)。ベータ版は2005年11月にリリース。event scheduler, partitioning, plugin API, row-based replication, server log tables搭載。
  • 2010年1月27日 - オラクルがサン・マイクロシステムズを買収。
  • 2010年12月15日 - Version 5.5 プロダクションリリース(5.5.8よりGA)。デフォルトのストレージエンジンが InnoDB になり、マルチコアCPUでのパフォーマンスが改善した[22]。ベータ版 (Version 5.4) は2009年4月にリリース。
  • 2013年2月5日 - Version 5.6 プロダクションリリース(5.6.10よりGA)。InnoDB、NoSQLの機能を強化[23][24]
  • 2015年10月21日 - Version 5.7 プロダクションリリース(5.7.9よりGA)。
  • 2018年4月19日 - Version 8.0 プロダクションリリース(8.0.11よりGA)[25]

利用状況編集

世界的にはこのMySQLの方が、ライバルであるFirebirdPostgreSQLよりも多く使用されており、ウェブサイトの構築に用いるソフトウェア環境として、LAMP (Linux, Apache, MySQL, PerlPHPPython) の略称が知られている。Yahoo!FacebookTwitterなどの巨大なウェブサイトでの適用例も多く、WebアプリケーションのXOOPSWordPressSugarCRMなどCMSも、バックエンドのデータベースとしてMySQLを利用している。また、ウィキペディアのためのソフトウェアであるMediaWikiでもこのソフトウェアを使用している[26]。他にも、社内用WebアプリケーションのサイボウズもMySQLを利用しており、MySQLを改造するため、有償契約をしている。

世界的な傾向に反し、以前の日本では、PostgreSQLの適用例がMySQLを上回っていた。2003年平成15年)の時点で、オープンソース系のデータベースとして、日本では8割以上がPostgreSQLだった。

その理由として、以下の理由が指摘されている。

  • 欧米において、MySQLの広報が積極的だった。
  • MySQLの日本ユーザ会の立ち上げが遅れた。
  • 日本でのPHPの本である「PHP徹底攻略」と「PHP4徹底攻略」がPostgreSQLとの接続を想定して記述されていた。
  • PostgreSQLの開発に日本人であるSRA石井達夫が関わっていた。彼は上記二冊の執筆も一部担当している。
  • Javaを開発するサン・マイクロシステムズが、MySQLよりもPostgreSQLを推していた。
  • かつてのMySQLでUnicodeのサポートが不十分だった。
  • アプリケーションの頒布形態によっては、GPLではなく商用ライセンスを選択しなければならないケースがある。

だが、そのような状況は徐々に変遷し、2009年(平成21年)の段階では、MySQLのほうがPostgreSQLよりも多く利用されているという報告がある[27][28]

プラットフォーム編集

MySQL 8.0は次のプラットフォームでサポートされている。[29]

開発言語編集

C, C++, Eiffel, Smalltalk, Java (JNI), LISP, Perl, PHP, Python, Ruby, TclはMySQLのAPIを介してデータベースにアクセスできる。またODBCインターフェース (MyODBC) もサポートされている。MySQL自体はCおよびC++で開発されている。埋め込みSQLによる開発はサポートされていないため、オープンソースプロジェクトのOpen ESQL等が利用される[30]

日本語処理編集

MySQLは、sjis (Shift_JIS)、cp932(Microsoftコードページ932)、utf8(UTF-8(3バイトまで))、utf8mb4(UTF-8(4バイトまで/MySQL5.5以降でサポート))、ujis (EUC-JP) といった文字セットを指定することで、日本語の文字を含む入出力を正しく扱うことができる。

sjisは、JIS X 0201およびJIS X 0208に準じたものであるが、同じ「Shift_JIS」でも、Windows環境で使用される文字の一部を正しく扱えない場合がある。これは、Windowsでは、前記の規格以外の拡張文字を含む、拡張されたShift_JISを使用しているためである。これらの文字をMySQLで正しく扱うには、sjisではなくcp932を指定する。同様の理由でujisではなくeucjpmsを指定すべきである。

たとえば、Microsoft AccessからUTF-8で格納するテーブルにODBCリンク経由でアクセスする場合は、MyODBCの文字セット設定をcp932にしておけば、正しく入出力できる。

cp932がMySQLでサポートされたのは4.1.12からであり、それまでは、「sjisで格納し、sjisで入出力」するという設定を行い、入出力時の文字コード変換を避けることで、Windowsの拡張シフトJISで問題が起きないようにする、というのが、日本国内における「常識」であった。cp932のサポートの前にはすでにUnicodeがサポートされていたが、それらを積極的に使用する人はあまりいなかった。なぜなら、Unicodeで格納するテーブルに対してsjisで入出力を行うと、Windows環境において拡張文字が適切に変換されず文字化けが発生するため、それが「Unicode対応が不完全」「Unicodeはまだ使いものにならない」という評価を生む一因となっていたからである。

Ruby on RailsCakePHPのデフォルトはutf8だが、データベース接続設定でencodingをutf8と明示的に使用宣言しておく必要がある。

MySQLの管理ツール編集

脚注編集

[脚注の使い方]

注釈編集

  1. ^ Initially, it was a MyISAM-only feature; supported by InnoDB since the release of MySQL 5.6.
  2. ^ Prior to MySQL 5.5.3, UTF-8 and UCS-2 encoded strings are limited to the BMP; MySQL 5.5.3 and later use utf8mb4 for full Unicode support.
  3. ^ In MySQL 5.0, storage engines must be compiled in; since MySQL 5.1, storage engines can be dynamically loaded at run time.

出典編集

  1. ^ Changes in Release 8.0.x (Production)” (英語). MySQL 8.0 Release Notes. MySQL.com (2020年4月27日). 2020年4月29日閲覧。
  2. ^ Which Should I Use: MySQL Enterprise or MySQL Community Server?”. MySQL AB. 2009年4月9日時点のオリジナルよりアーカイブ。2009年4月8日閲覧。
  3. ^ Guy Harrison; Steven Feuerstein (2008). MySQL Stored Procedure Programming. O'Reilly Media. p. 49. ISBN 978-0-596-10089-6. https://books.google.com/books?id=YpeP0ok0cO4C&pg=PT75 
  4. ^ Monitoring RDS MySQL performance metrics”. Datadog (2015年10月20日). 2015年12月14日閲覧。
  5. ^ MySQL :: InnoDB 1.1 for MySQL 5.5 User's Guide :: C InnoDB Glossary :: ACID”. 2010年12月25日時点のオリジナルよりアーカイブ。2011年1月5日閲覧。
  6. ^ Replication”. MySQL. 2020年5月2日閲覧。
  7. ^ MariaDB Replication”. MariaDB KnowledgeBase. 2019年3月9日閲覧。
  8. ^ MySQL :: MySQL 5.7 Reference Manual :: 16.1.4 MySQL Multi-Source Replication”. dev.mysql.com. 2019年3月9日閲覧。
  9. ^ MySQL :: MySQL 5.7 Reference Manual :: 16.3.9 Semisynchronous Replication”. dev.mysql.com. 2019年3月9日閲覧。
  10. ^ Semisynchronous Replication”. MariaDB KnowledgeBase. 2019年3月9日閲覧。
  11. ^ MySQL Cluster Replication: Multi-Master and Circular Replication”. MySQL. 2020年5月2日閲覧。
  12. ^ MySQL University: MySQL Galera Multi-Master Replication”. Oracle Corporation. 2020年5月2日閲覧。
  13. ^ MySQL :: MySQL 8.0 Reference Manual :: 18 Group Replication”. dev.mysql.com. 2019年3月9日閲覧。
  14. ^ MySQL :: MySQL 8.0 Reference Manual :: 18 Group Replication”. dev.mysql.com. 2019年3月9日閲覧。
  15. ^ http://db-engines.com/en/ranking
  16. ^ http://www-jp.mysql.com/why-mysql/marketshare/
  17. ^ a b http://www.ipa.go.jp/software/open/ossc/seika_1004.html
  18. ^ 451 Group survey highlights user concerns over Oracle's proposed ownership of MySQL
  19. ^ MySQLのライセンスポリシー
  20. ^ FOSS License Exception
  21. ^ MySQL Editions
  22. ^ 1.5. What Is New in MySQL 5.5
  23. ^ Oracle>About>Press Room>Oracle Announces General Availability of MySQL 5.6
  24. ^ Oracle Japan>Media centre home>ニュースリリース>MySQL5.6の一般提供開始を発表
  25. ^ MySQL 8.0: New Features in Replication
  26. ^ なお、ウィキペディア自体はMySQLからフォークしたMariaDBの利用へと移行している。
  27. ^ http://ossipedia.ipa.go.jp/doc/201
  28. ^ http://www.itmedia.co.jp/enterprise/articles/1005/12/news011.html
  29. ^ Supported Platforms: MySQL Database
  30. ^ Open ESQL

関連項目編集

外部リンク編集