MySQL (マイ・エスキューエル、海外では俗にマイ・シークェルとも)は、オープンソース のリレーショナルデータベース管理システム (RDBMS) である。その名前は、共同設立者のミカエル・ウィデニウス の娘の名前である「My」と、Structured Query Language の略称である「SQL」を組み合わせたものである。
MySQLは、GNU General Public License の条件に基づいたフリーでオープンソースのソフトウェアであり、さまざまなプロプライエタリライセンスでも利用可能である。MySQLは、サン・マイクロシステムズ (現在のオラクル )に買収されたスウェーデンの企業MySQL AB が所有、出資していた。2010年にオラクルがサンを買収したとき、ウィデニウスはオープンソースのMySQLプロジェクトをフォークしてMariaDB を作った。
MySQLは、LAMP Webアプリケーションソフトウェアスタック(LAMPは、Linux 、Apache 、MySQL、Perl /PHP /Python の頭字語)のコンポーネントである。MySQLは、Drupal 、Joomla 、phpBB 、WordPress など、多くのデータベース駆動型Webアプリケーションで使用されている。MySQLは、Facebook 、Flickr 、MediaWiki 、Twitter 、YouTube など[2] [3] 、多くの人気Webサイトでも使用されている。
概要
MySQLはC とC++ で書かれている。SQLパーサーはyacc で書かれている(実際のコンパイルにはBison が使われる)が、字句解析にはLex は使わず自家製の字句解析器 を使用している。MySQLは、AIX 、BSDi、FreeBSD 、HP-UX 、eComStation、i5/OS、IRIX 、Linux、macOS 、Microsoft Windows 、NetBSD 、Novell NetWare、OpenBSD 、OpenSolaris 、OS/2Warp、QNX、Symbian、SunOS、SCO OpenServer、SCO UnixWare、Sanos、Tru64など、多くのシステムプラットフォームで動作する。OpenVMS へのMySQLのポートも存在する。
MySQLサーバーソフトウェアとクライアントライブラリは、デュアルライセンス配布を使用している。これらはGPLバージョン2、またはプロプライエタリなライセンスで提供されている。
公式マニュアル[4] からサポートを得ることができる。また、別のIRCチャネルやフォーラムでも無償サポートが提供されている。オラクルはMySQL Enterprise製品を通じて有償サポートを提供している。それらはサービスの範囲や価格がそれぞれ違っている。さらに、MariaDB やPercona (en:Percona ) など、サポートやサービスを提供するサードパーティ組織も多数存在する。
MySQLは肯定的なレビューを受けており、レビュー担当者はMySQLが「平均的なケースでは非常によく機能」し、「開発者向けのインターフェイスがあり、ドキュメント(Webサイトなどを通じた現実世界でのフィードバックは言うまでもなく)も非常に良い。」ことに気付いた。また、「高速で安定した真のマルチユーザ、マルチスレッドのSQLデータベースサーバ」としてもテストされている。
特徴
MySQLは、オープンソース のMySQL Community ServerとプロプライエタリのEnterprise Server の2つの異なるエディションで提供される。[5] MySQL Enterprise Serverは、サーバープラグインとしてインストールされる一連の独自の拡張機能によって差別化されているが、それ以外は同じバージョン番号付けシステムを共有し、同じコードベースから構築される。
MySQL 5.6で利用可能な主な機能:
開発者は、約3か月ごとにMySQL Serverのマイナーアップデートをリリースする。ソースは、両方ともGPLライセンスの下で、MySQLのWebサイトまたはMySQLのGitHub リポジトリから取得できる。
シェア
世界でもっとも普及しているオープンソースのRDBMSとして知られており[18] 、市場シェアではPostgreSQL などの他のオープンソース・データベースを圧倒している[19] 。日本でも2009年になってPostgreSQL を超えるシェアを獲得している[20] 。初期のMySQLで文字コードのサポートが悪かったのが影響したが、現在はEUC、SJIS、多言語面を含むUTF-8などをサポートしている。
利用企業数の割合
地域
MySQL
PostgreSQL
調査機関
世界
82.1%
27.1%
451 Group (2009年)[21]
日本
60.5%
51.9%
IPA (2009年)[20]
ストレージエンジン
データの保存とアクセスを行うストレージエンジンが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 とコマーシャルライセンス のデュアルライセンス方式で提供されている[22] 。基本的に、MySQLのサーバ本体とクライアントライブラリはGPLで提供される。このため、MySQLを改造し、それを再頒布する場合は、GPLに従う必要がある。
GPLのクライアントライブラリを利用してMySQLに接続するアプリケーションを開発した場合、そのアプリケーションもGPLライセンスとしなければならない可能性がある。ただし、クライアントライブラリに関しては、アプリケーションが既定のオープンソースライセンスで公開されるのであれば、GPL以外のオープンソースライセンスで再頒布することも可能である[23] 。
サポートやツールが提供される有料サブスクリプションのMySQL Standard Edition, Enterprise Editionでは、コマーシャルライセンス版のバイナリが提供される[24] 。コマーシャルライセンス版では、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でのパフォーマンスが改善した[25] 。ベータ版 (Version 5.4) は2009年4月にリリース。
2013年2月5日 - Version 5.6 プロダクションリリース(5.6.10よりGA)。InnoDB、NoSQLの機能を強化[26] [27] 。
2015年10月21日 - Version 5.7 プロダクションリリース(5.7.9よりGA)。
2018年4月19日 - Version 8.0 プロダクションリリース(8.0.11よりGA)[28] 。
利用状況
世界的にはこのMySQLの方が、ライバルであるFirebird やPostgreSQL よりも多く使用されており、ウェブサイト の構築に用いるソフトウェア 環境として、LAMP (L inux , A pache , M ySQL, P erl ・P HP ・P ython ) の略称が知られている。Yahoo! 、Facebook 、Twitter などの巨大なウェブサイトでの適用例も多く、WebアプリケーションのXOOPS 、WordPress 、SugarCRM などCMS も、バックエンドのデータベースとしてMySQLを利用している。また、ウィキペディア のためのソフトウェアであるMediaWiki でもこのソフトウェアを使用している[注 4] 。他にも、社内用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 よりも多く利用されているという報告がある[29] [30] 。
プラットフォーム
MySQL 8.0は次のプラットフォームでサポートされている。[31]
開発言語
C , C++ , Eiffel , Smalltalk , Java (JNI ), LISP , Perl , PHP , Python , Ruby , Tcl はMySQLのAPI を介してデータベースにアクセスできる。またODBC インターフェース (MyODBC) もサポートされている。MySQL自体はCおよびC++で開発されている。埋め込みSQL による開発はサポートされていないため、オープンソースプロジェクトのOpen ESQL等が利用される[32] 。
日本語処理
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 Rails 、CakePHP のデフォルトはutf8だが、データベース接続設定でencodingをutf8と明示的に使用宣言しておく必要がある。
MySQLの管理ツール
注釈
出典
関連項目
外部リンク
ウィキメディア・コモンズには、
MySQL に関連するカテゴリがあります。
同社はオラクル により2010年に買収された。 人物 ハードウェア
ワークステーション、 サーバ プロセッサ ネットワーク コンピュータ その他
ソフトウェア HPC 研究 教育 コミュニティ
カテゴリ