MySQL

MySQL（マイ・エスキューエル、海外ではマイ・シークェルとも）は、オープンソースのリレーショナルデータベース管理システム (RDBMS) である。その名前は、共同設立者のミカエル・ウィデニウスの娘の名前である「My」と、Structured Query Languageの略称である「SQL」を組み合わせたものである。

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

MySQLは、LAMPウェブアプリケーションソフトウェアスタック（LAMPは、Linux、Apache、MySQL、Perl/PHP/Pythonの頭字語）のコンポーネントである。MySQLは、Drupal、Joomla、phpBB、WordPressなど、多くのデータベース駆動型ウェブアプリケーションで使用されている。MySQLは、Facebook、Flickr、MediaWiki、Twitter、YouTubeなど、多くの人気ウェブサイトでも使用されている。
 概要 
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、またはプロプライエタリなライセンスで提供されている。

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

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

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

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

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

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

 シェア 
世界でもっとも普及しているオープンソースのRDBMSとして知られておりDB-Engines Ranking - popularity ranking of database management systems、市場シェアではPostgreSQLなどの他のオープンソース・データベースを圧倒しているhttp://www-jp.mysql.com/why-mysql/marketshare/。日本でも2009年になってPostgreSQLを超えるシェアを獲得しているオープンソフトウェア：第2回オープンソースソフトウェア活用ビジネス実態調査：IPA 独立行政法人 情報処理推進機構。初期のMySQLで文字コードのサポートが悪かったのが影響したが、現在はEUC、SJIS、多言語面を含むUTF-8などをサポートしている。

+ 利用企業数の割合 地域  MySQL  PostgreSQL  調査機関 世界 82.1%  27.1%  451 Group （2009年）451 Group survey highlights user concerns over Oracle's proposed ownership of MySQL 日本 60.5%  51.9%  IPA （2009年）

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

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

また、InnoDB登場以前から搭載されているMyISAMストレージエンジンも検索が高速であり、更新よりも参照の頻度の高いウェブアプリケーションなどで活用されている。全文検索や空間検索が利用できるのも、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 とコマーシャルライセンスのデュアルライセンス方式で提供されているMySQLのライセンスポリシー。基本的に、MySQLのサーバ本体とクライアントライブラリはGPLで提供される。このため、MySQLを改造し、それを再頒布する場合は、GPLに従う必要がある。

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

サポートやツールが提供される有料サブスクリプションのMySQL Standard Edition, Enterprise Editionでは、コマーシャルライセンス版のバイナリが提供されるMySQL Editions。コマーシャルライセンス版では、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でのパフォーマンスが改善した1.5. What Is New in MySQL 5.5。ベータ版 (Version 5.4) は2009年4月にリリース。
 2013年2月5日 - Version 5.6 プロダクションリリース（5.6.10よりGA）。InnoDB、NoSQLの機能を強化Oracle>About>Press Room>Oracle Announces General Availability of MySQL 5.6Oracle Japan>Media centre home>ニュースリリース>MySQL5.6の一般提供開始を発表。
 2015年10月21日 - Version 5.7 プロダクションリリース（5.7.9よりGA）。
 2018年4月19日 - Version 8.0 プロダクションリリース（8.0.11よりGA）MySQL 8.0: New Features in Replication。
 2023年7月 - 今後は「LTS(Long Term Support)」と「IR(Innovation Release)」の2本立てで開発が行われるとアナウンスされる。MySQLの Innovation と Long-Term Support (LTS) バージョンのご紹介。
 2024年4月30日 - Version 8.4 LTS プロダクションリリース(8.4.0よりGA) ついに正式リリース！MySQL 8.4 LTS の全容をご紹介。

 利用状況 
世界的にはこのMySQLの方が、ライバルであるFirebirdやPostgreSQLよりも多く使用されており、ウェブサイトの構築に用いるソフトウェア環境として、LAMP (Linux, Apache, MySQL, Perl・PHP・Python) の略称が知られている。Yahoo!、Facebook、Twitterなどの巨大なウェブサイトでの適用例も多く、ウェブアプリケーションのXOOPS、WordPress、SugarCRMなどCMSも、バックエンドのデータベースとしてMySQLを利用している。また、ウィキペディアのためのソフトウェアであるMediaWikiでもこのソフトウェアを使用しているなお、ウィキペディア自体はMySQLからフォークしたMariaDBの利用へと移行している。。他にも、社内用ウェブアプリケーションのサイボウズも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よりも多く利用されているという報告があるhttp://ossipedia.ipa.go.jp/doc/201SQL ServerとOSSが勢力拡大の兆し――DBMS市場：ITmedia リサーチインタラクティブ 第6回調査 - ITmedia エンタープライズ。

 プラットフォーム 
MySQL 8.0は次のプラットフォームでサポートされている。Supported Platforms: MySQL Database
 FreeBSD 11以降
 Oracle Linux 6以降
 OS X 10.12以降
 Microsoft Windows 10

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

 日本語処理 
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 Workbench (5.2以降) MySQL :: MySQL Workbench
 phpMyAdmin
 phpMyBackupPro phpMyBackupPro - the MySQL backup tool :: Features
 Navicat for MySQL Navicat for MySQL | MySQLに対応したDB管理・開発ツール
 MySQL Administrator MySQL :: MySQL Workbench: Administration
 Database Master Home - Nucleon Software
 Sequel Pro Sequel Pro
 Adminer Adminer - Database management in a single PHP file

 注釈 

 出典 

 関連項目 



 ストレージエンジン
 MyISAM
 InnoDB
 Aria（以前の名称はMaria）


 アプリケーションとパッケージ
 MediaWiki - MySQLをバックエンドに用いることが可能である。
 XAMPP
 MySQLからフォークしたプロジェクト
 MariaDB


 外部リンク 

 MySQL.com
 日本MySQLユーザ会
 MySQL Reference Manuals
 どのようにデータベースのMySQL Workbenchを使用して作成する - このチュートリアルではデータベースのMySQL Workbenchを使用して作成する方法について説明。

*
Category:データベース管理システム
Category:オープンソースソフトウェア
Category:サン・マイクロシステムズ
Category:オラクル
Category:1995年のソフトウェア
Category:GNU General Public Licenseを利用するソフトウェア