マイ‐エスキューエル【MySQL】
MySQL
スウェーデンのMySQL AB社によって開発されているリレーショナルデータベース製品。GPLとMySQL AB、またはその代理店から購入する商用ライセンスのデュアルライセンスによって配布されている。
オープンソースのDBMS(データベース管理システム)の中で最も広く使われているものの1つ。Linux、UNIX、Windows、Mac OS Xなど多くのプラットフォームがサポートされている。LAMPの1つに挙げられているように、PHPなどと組み合わせて、Webサイト構築時のパックエンドを支えるDBMSとして利用されることが多い。
初期のMySQLは、トランザクションやストアドプロシージャなどの機能を省く代わりに、軽さ・高速さを身上として人気を得た。近年のバージョンでは、前述のような機能を実装しており、高速だが低機能という評価を払拭しつつある。
関連見出し
LAMP
GPL
デュアルライセンス
関連URL
MySQL AB(http://www.mysql.com/)

MySQL
スウェーデンのMySQL AB社が中心となって開発している、オープンソースのリレーショナルデータベース管理システム(RDBMS:Relational Database Management System)の一つ。
マルチユーザ、マルチスレッドで動作し、高速性と堅牢性に定評がある。オープンソースなので基本的には無償で利用することができる。また、GPL(GNU General Public License)ライセンス条件の元で自分のニーズに合わせてソースコードをカスタマイズすることができる。GPLライセンスに従わない場合や商用アプリケーションにMySQLのコードを組み込む場合には、コマーシャルライセンスを購入する必要がある。Windowsを初め、各種UNIX系OSなど、多くのプラットフォームに対応している。
関連用語
- phpMyAdmin
- LAMP
- XAMPP
関連Webサイト
MySQL
MySQLとは、Sun Microsystemsからオープンソースソフトウェア(OSS)として公開されているリレーショナルデータベース管理システム(RDBMS)の名称である。
MySQLは、もともとはMySQL AB社において開発・提供が行われていたソフトウェアであり、オープンソースで提供されてはいるが、商用のデータベースに勝るとも劣らない品質を実現している。独自アーキテクチャーのデータベースエンジンを搭載しており、パフォーマンスの高さに定評がある他、数MB単位からTB単位まで対応するスケーラビリティの高さや、Linux、UNIX、Windowsなどの複数のプラットフォームに対応するマルチプラットフォーム性、柔軟なカスタマイズ性、トランザクション処理などに関する堅牢性といった点でも優れているといわれる。
MySQLは、高性能であり、巨大なシステムにも対応でき、かつ、GPLライセンスに従って自由に利用することができることから、商用サイトも含めて多くのデータベースでデータベース管理システムとして採用されている。Yahoo!、Google、YouTube、Wikipedia、といった、巨大なデータベースシステムにおいても、MySQLが採用されていることが知られている。
OSSを利用してWebアプリケーションのプラットフォームを構築する際、最もよく利用されるソフトウェアのセットとして、LAMPと呼ばれる組み合わせがある。「L」はOSのLinux、「A」はWebサーバーのApache、そして「M」がデータベースのMySQLを指している。なお「P」はプログラミング言語として、PHP、またはPerl、Pythonのいずれかを指す。
MySQLは、OSSのRDBMSとしては世界で最も多く利用されているといわれている。なお、MySQLと同様にOSSとして提供されているRDBMSとしては、PostgreSQLを挙げることができる。
参照リンク
MySQL - (英文)
MySQL
データベース: | DB2 GLR Microsoft Access MySQL Microsoft Query NEEDS PostgreSQL |
MySQL 関数
表 170. MySQL 設定オプション
名前 | デフォルト | 変更の可否 | 変更履歴 |
---|---|---|---|
mysql.allow_persistent | "1" | PHP_INI_SYSTEM | |
mysql.max_persistent | "-1" | PHP_INI_SYSTEM | |
mysql.max_links | "-1" | PHP_INI_SYSTEM | |
mysql.trace_mode | "0" | PHP_INI_ALL | PHP 4.3.0 以降で使用可能です。 |
mysql.default_port | NULL | PHP_INI_ALL | |
mysql.default_socket | NULL | PHP_INI_ALL | PHP 4.0.1 以降で使用可能です。 |
mysql.default_host | NULL | PHP_INI_ALL | |
mysql.default_user | NULL | PHP_INI_ALL | |
mysql.default_password | NULL | PHP_INI_ALL | |
mysql.connect_timeout | "60" | PHP_INI_ALL | PHP <= 4.3.2 では PHP_INI_SYSTEM で、PHP 4.3.0 以降で使用可能です。 |
PHP_INI_* 定数の詳細および定義については 付録 G. php.ini ディレクティブ を参照してください。
以下に設定ディレクティブに関する 簡単な説明を示します。
- mysql.allow_persistent boolean
-
MySQL への
持続的接続
を可能にするかどうか。
- mysql.max_persistent integer
-
プロセス毎の持続的 MySQL 接続の最大数。
- mysql.max_links integer
-
持続的接続を含むプロセス毎の MySQL 接続の最大数。
- mysql.trace_mode boolean
-
トレースモード。mysql.trace_mode が有効の場合、
テーブル/インデックスのスキャン時の警告・結果セットの未開放・SQL エラー
などが画面に表示されます(PHP 4.3.0 以降で使用可能です)。
- mysql.default_port string
-
他のポートが指定されない場合、データベースサーバ接続時に使用される
デフォルトの TCP ポート番号。デフォルトが指定されない場合は、
環境変数
MYSQL_TCP_PORT
・ /etc/services の mysql-tcpエントリ・コンパイル時の MYSQL_PORT 定数の順番でポートが取得されます。 Win32 では、MYSQL_PORT 定数のみが使用されます。 - mysql.default_socket string
-
他にソケット名が指定されない場合、ローカルなデータベースサーバに
接続する時のデフォルトのソケット名。
- mysql.default_host string
-
他のサーバ名が指定されない場合に、データベースサーバへの接続時に
使用されるデフォルトのサーバ名。
SQL セーフモード では適用されません。
- mysql.default_user string
-
他のユーザ名が指定されない場合に、データベースサーバへの接続時に
使用されるデフォルトのユーザ名。
SQL セーフモード では適用されません。
- mysql.default_password string
-
他のパスワードが指定されない場合に、データベースサーバへの接続時に
使用されるデフォルトのパスワード。
SQL セーフモード では適用されません。
- mysql.connect_timeout integer
-
接続の有効時間(単位:秒)。Linux では、この有効時間はサーバからの
最初の応答の待ち時間としても使用されます。
リソース型
MySQL モジュールでは、2 種類のリソース型が使用されています。 最初のリソースはデータベース接続のリンク ID で、2 番目のリソースは クエリ結果を保持するリソースです。定義済み定数
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。PHP 4.3.0 以降では、mysql_connect() や mysql_pconnect() で追加のクライアントフラグを 指定できるようになりました。以下の定数が定義されています。 表 171. MySQL クライアント定数
定数 | 説明 |
---|---|
MYSQL_CLIENT_COMPRESS | 圧縮プロトコルを利用します。 |
MYSQL_CLIENT_IGNORE_SPACE | 関数名の後のスペースを許可します。 |
MYSQL_CLIENT_INTERACTIVE | interactive_timeout で指定された秒数(wait_timeout のかわり) の無通信が続くまで接続を閉じません。 |
MYSQL_CLIENT_SSL | SSL による暗号化を使用します。このフラグは、バージョン 4.x 以降の MySQL クライアントライブラリを利用している場合にのみ有効です。 PHP 4 や、Windows 版の PHP 5 にバンドルされているのは、バージョン 3.23.x のライブラリです。 |
mysql_fetch_array() 関数は、結果の配列の形式を 指定するための定数を使用します。以下の定数が定義されています。 表 172. MySQL フェッチ定数
定数 | 説明 |
---|---|
MYSQL_ASSOC | カラムは、フィールド名を添字とする配列形式で返されます。 |
MYSQL_BOTH | カラムは、数値の添字とフィールド名の添字のどちらでもアクセスできる 配列形式で返されます。 |
MYSQL_NUM | カラムは、数値の添字を持つ配列形式で返されます。添字は 0 からはじまり、 結果の最初のフィールドです。 |
注意
注意: ほとんどの MySQL 関数は、link_identifier を 最後のパラメータとしてオプションで受け付けます。これを指定しなかった場合、 直近にオープンされた接続が使用されます。もし直近の接続が存在しない場合、 php.ini のデフォルトパラメータを使用して接続を確立しようとします。 この試行にも失敗した場合、関数は FALSE を返します。例
以下は、MySQL データベースに接続し、クエリを実行し、結果レコードを 出力、接続を切断する例です。 例 1307. MySQL 拡張モジュールに関する例
<?php
// データベースに接続し、選択する
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
or die('Could not connect: ' . mysql_error());
echo 'Connected successfully';
mysql_select_db('my_database') or die('Could not select database');
// SQL クエリを実行する
$query = 'SELECT * FROM my_table';
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
// HTML に結果を出力する
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// 結果セットを開放する
mysql_free_result($result);
// 接続を閉じる
mysql_close($link);
?>
目次
- mysql_affected_rows — 一番最近の操作で変更された行の数を得る
- mysql_change_user — アクティブな接続でログイン中のユーザーを変更する
- mysql_client_encoding — 文字セット名を返す
- mysql_close — MySQL 接続を閉じる
- mysql_connect — MySQL サーバへの接続をオープンする
- mysql_create_db — MySQL データベースを作成する
- mysql_data_seek — 内部的な結果ポインタを移動する
- mysql_db_name — データベース名を得る
- mysql_db_query — MySQL クエリーを送信する
- mysql_drop_db — MySQLデータベースを破棄(削除)する
- mysql_errno — 直近の MySQL 処理からエラーメッセージのエラー番号を返す
- mysql_error — 直近に実行された MySQL 操作のエラーメッセージを返す
- mysql_escape_string — mysql_query で使用するために文字列をエスケープする
- mysql_fetch_array — 連想配列、添字配列、またはその両方として結果の行を取得する
- mysql_fetch_assoc — 連想配列として結果の行を取得する
- mysql_fetch_field — 結果からカラム情報を取得し、オブジェクトとして返す
- mysql_fetch_lengths — 結果における各出力の長さを得る
- mysql_fetch_object — 結果の行をオブジェクトとして取得する
- mysql_fetch_row — 結果を添字配列として取得する
- mysql_field_flags — 結果において指定したフィールドのフラグを取得する
- mysql_field_len — 指定したフィールドの長さを返す
- mysql_field_name — 結果において指定したフィールド名を取得する
- mysql_field_seek — 結果ポインタを指定したフィールドオフセットにセットする
- mysql_field_table — 指定したフィールドが含まれるテーブルの名前を取得する
- mysql_field_type — 結果において指定したフィールドの型を取得する
- mysql_free_result — 結果保持用メモリを開放する
- mysql_get_client_info — MySQL クライアント情報を取得する
- mysql_get_host_info — MySQL ホスト情報を取得する
- mysql_get_proto_info — MySQL プロトコル情報を取得する
- mysql_get_server_info — MySQL サーバ情報を取得する
- mysql_info — 直近のクエリについての情報を得る
- mysql_insert_id — 直近の INSERT 操作で生成された ID を得る
- mysql_list_dbs — MySQL サーバ上で利用可能なデータベースのリストを得る
- mysql_list_fields — MySQL テーブルのフィールドのリストを得る
- mysql_list_processes — MySQL プロセスのリストを得る
- mysql_list_tables — MySQL データベース上のテーブルのリストを得る
- mysql_num_fields — 結果におけるフィールドの数を得る
- mysql_num_rows — 結果における行の数を得る
- mysql_pconnect — MySQL サーバへの持続的な接続をオープンする
- mysql_ping — サーバとの接続状況を調べ、接続されていない場合は再接続する
- mysql_query — MySQL クエリを送信する
- mysql_real_escape_string — SQL 文中で用いる文字列の特殊文字をエスケープする
- mysql_result — 結果データを得る
- mysql_select_db — MySQL データベースを選択する
- mysql_stat — 現在のシステムの状態を取得する
- mysql_tablename — フィールドのテーブル名を得る
- mysql_thread_id — カレントのスレッド ID を返す
- mysql_unbuffered_query — MySQL に SQL クエリを送信するが、結果に対してのフェッチやバッファリングは行わない
MySQL 関数 (PDO_MYSQL)
導入
PDO_MYSQL は、PHP から MySQL 3.x、4.x および 5.x データベースへのアクセスを可能にするための PHP Data Objects (PDO) インターフェース を実装したドライバです。PDO_MYSQL は、MySQL 4.1 以降に存在するプリペアドステートメントを ネイティブにサポートしているという利点があります。 古いバージョンの mysql クライアントライブラリを使用している場合は、 PDO がこの機能をエミュレートします。
警告 |
注意: MySQL のテーブル型 (ストレージエンジン) の中には、
トランザクションをサポートしていないものがあります。
トランザクションをサポートしていないテーブル型を使用して
トランザクションを使用するコードを書くと、
MySQL はトランザクションが正常に使用できたかのように振舞います。
さらに、DDL クエリを実行する際には、
実行中のトランザクションが暗黙的にコミットされます。
|
定義済み定数
このドライバでは以下の定数が定義されて います。これは拡張モジュールが PHP に組み込まれているか、実行時に動的にロード されている場合のみ使用可能です。さらに、これらのドライバ固有の定数は そのドライバを使用している場合にのみ使用されます。 postgres ドライバで mysql 固有の属性を使用すると、予期せぬ結果を引き起こします。 もし複数のドライバを使用しているコードを実行している場合、 PDO::getAttribute() で PDO_ATTR_DRIVER_NAME 属性を使用することで、使用中のドライバ名を調べることが可能です。- PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (integer)
-
PDOStatement
でこの属性を TRUE に設定すると、 MySQL ドライバはバッファ版の MySQL API を使用します。 移植性の高いコードを書くには、代わりに PDOStatement::fetchAll() を使用すべきです。
例 1363. mysql でクエリのバッファリングを強制する
<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
$stmt = $db->prepare('select * from foo',
array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
} else {
die("このアプリケーションは mysql でしか動作しません。代わりに \$stmt->fetchAll() を使用すべきです");
}
?>
- PDO::MYSQL_ATTR_LOCAL_INFILE (integer)
-
LOAD LOCAL INFILE を有効にします。
- PDO::MYSQL_ATTR_INIT_COMMAND (integer)
-
MySQL サーバへの接続時に実行するコマンドを指定します。
再接続の際には自動的に再実行されます。
- PDO::MYSQL_ATTR_READ_DEFAULT_FILE (integer)
-
my.cnf ではなく、
指定した名前のファイルからオプションを読み込みます。
- PDO::MYSQL_ATTR_READ_DEFAULT_GROUP (integer)
-
my.cnf あるいは
別のファイル (MYSQL_READ_DEFAULT_FILE
で指定したもの) の中の、指定した名前のグループからオプションを読み込みます。
- PDO::MYSQL_ATTR_MAX_BUFFER_SIZE (integer)
-
バッファの最大サイズ。デフォルトは 1 MiB です。
- PDO::MYSQL_ATTR_DIRECT_QUERY (integer)
-
プリペアドステートメントではなく、直接クエリを実行します。
目次
- PDO_MYSQL DSN — MySQL データベースに接続する
MySQL
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/04/26 03:57 UTC 版)
![]() 現在のロゴ | |||||||
![]() | |||||||
開発元 | オラクル(サン・マイクロシステムズ) | ||||||
---|---|---|---|---|---|---|---|
初版 | 1995年5月23日 | ||||||
最新版 |
![]()
| ||||||
リポジトリ | |||||||
プログラミング 言語 | C, C++ | ||||||
対応OS | クロスプラットフォーム | ||||||
種別 | RDBMS | ||||||
ライセンス | GPL v2 または Commercial License | ||||||
公式サイト |
www.mysql.com/jp/ dev.mysql.com |
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など[4][5]、多くの人気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、またはプロプライエタリなライセンスで提供されている。
公式マニュアル[6]からサポートを得ることができる。また、別のIRCチャネルやフォーラムでも無償サポートが提供されている。オラクルはMySQL Enterprise製品を通じて有償サポートを提供している。それらはサービスの範囲や価格がそれぞれ違っている。さらに、MariaDBやPercona (en:Percona) など、サポートやサービスを提供するサードパーティ組織も多数存在する。
MySQLは肯定的なレビューを受けており、レビュー担当者はMySQLが「平均的なケースでは非常によく機能」し、「開発者向けのインターフェイスがあり、ドキュメント(Webサイトなどを通じた現実世界でのフィードバックは言うまでもなく)も非常に良い。」ことに気付いた。また、「高速で安定した真のマルチユーザ、マルチスレッドのSQLデータベースサーバ」としてもテストされている。
特徴
MySQLは、オープンソースのMySQL Community ServerとプロプライエタリのEnterprise Serverの2つの異なるエディションで提供される。[7] MySQL Enterprise Serverは、サーバープラグインとしてインストールされる一連の独自の拡張機能によって差別化されているが、それ以外は同じバージョン番号付けシステムを共有し、同じコードベースから構築される。
MySQL 5.6で利用可能な主な機能:
- ANSI SQL 99の広範なサブセットと拡張機能
- クロスプラットフォームのサポート
- SQL / PSMに厳密に従う手続き言語を使用するストアドプロシージャ [8]
- トリガー
- カーソル
- 更新可能なビュー
- InnoDBストレージエンジンを使用する場合のオンラインデータ定義言語 (DDL)。
- 情報スキーマ
- 監視目的でサーバーの実行とクエリのパフォーマンスに関する統計を収集および集約するパフォーマンススキーマ。[9]
- 実行時の動作を制御するための一連のSQLモードオプション。SQL標準に準拠するための厳密モードが含まれる。
- X / Open XA 分散トランザクション処理 (DTP) サポート。この一環として、デフォルトのInnoDBストレージエンジンを使用した2フェーズコミット
- デフォルトのInnoDB Storage Engineを使用する場合のセーブポイントを持つトランザクション。NDB Cluster Storage Engineはトランザクションもサポートする。
- InnoDBおよびNDB Cluster Storage Engineを使用する場合のACIDコンプライアンス[10]
- SSLサポート
- クエリキャッシング
- サブSELECT(ネストされたSELECT)
- ビルトインされたレプリケーションサポート
- 全文索引付けおよび検索[注 1]
- 組み込みデータベースライブラリ
- Unicodeサポート[注 2]
- オプティマイザーでパーティションをプルーニングしたパーティションテーブル
- MySQL Clusterによる非共有クラスタリング
- 複数のストレージエンジン。アプリケーションの各テーブルに最も効果的なストレージエンジンを選択できる[注 3]。
- ネイティブストレージエンジンInnoDB、MyISAM、マージ、メモリ(ヒープ)、フェデレーション、アーカイブ、CSV、ブラックホール、NDBクラスター。
- グループ化をコミットし、複数の接続から複数のトランザクションを収集して、1秒あたりのコミット数を増やす。
開発者は、約3か月ごとにMySQL Serverのマイナーアップデートをリリースする。ソースは、両方ともGPLライセンスの下で、MySQLのWebサイトまたはMySQLのGitHubリポジトリから取得できる。
シェア
世界でもっとも普及しているオープンソースのRDBMSとして知られており[20]、市場シェアではPostgreSQLなどの他のオープンソース・データベースを圧倒している[21]。日本でも2009年になってPostgreSQLを超えるシェアを獲得している[22]。初期のMySQLで文字コードのサポートが悪かったのが影響したが、現在はEUC、SJIS、多言語面を含むUTF-8などをサポートしている。
地域 | MySQL | PostgreSQL | 調査機関 |
---|---|---|---|
世界 | 82.1% | 27.1% | 451 Group (2009年)[23] |
日本 | 60.5% | 51.9% | IPA (2009年)[22] |
ストレージエンジン
データの保存とアクセスを行うストレージエンジンが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 とコマーシャルライセンスのデュアルライセンス方式で提供されている[24]。基本的に、MySQLのサーバ本体とクライアントライブラリはGPLで提供される。このため、MySQLを改造し、それを再頒布する場合は、GPLに従う必要がある。
GPLのクライアントライブラリを利用してMySQLに接続するアプリケーションを開発した場合、そのアプリケーションもGPLライセンスとしなければならない可能性がある。ただし、クライアントライブラリに関しては、アプリケーションが既定のオープンソースライセンスで公開されるのであれば、GPL以外のオープンソースライセンスで再頒布することも可能である[25]。
サポートやツールが提供される有料サブスクリプションのMySQL Standard Edition, Enterprise Editionでは、コマーシャルライセンス版のバイナリが提供される[26]。コマーシャルライセンス版では、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でのパフォーマンスが改善した[27]。ベータ版 (Version 5.4) は2009年4月にリリース。
- 2013年2月5日 - Version 5.6 プロダクションリリース(5.6.10よりGA)。InnoDB、NoSQLの機能を強化[28][29]。
- 2015年10月21日 - Version 5.7 プロダクションリリース(5.7.9よりGA)。
- 2018年4月19日 - Version 8.0 プロダクションリリース(8.0.11よりGA)[30]。
利用状況
世界的にはこのMySQLの方が、ライバルであるFirebirdやPostgreSQLよりも多く使用されており、ウェブサイトの構築に用いるソフトウェア環境として、LAMP (Linux, Apache, MySQL, Perl・PHP・Python) の略称が知られている。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よりも多く利用されているという報告がある[31][32]。
プラットフォーム
MySQL 8.0は次のプラットフォームでサポートされている。[33]
- 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等が利用される[34]。
日本語処理
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以降) [注 5]
- phpMyAdmin
- phpMyBackupPro [注 6]
- Navicat for MySQL [注 7]
- MySQL Administrator [注 8]
- Database Master [注 9]
- Sequel Pro [注 10]
- Adminer [注 11]
注釈
- ^ Initially, it was a MyISAM-only feature; supported by InnoDB since the release of MySQL 5.6.
- ^ 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.
- ^ In MySQL 5.0, storage engines must be compiled in; since MySQL 5.1, storage engines can be dynamically loaded at run time.
- ^ なお、ウィキペディア自体はMySQLからフォークしたMariaDBの利用へと移行している。
- ^ MySQL :: MySQL Workbench
- ^ phpMyBackupPro - the MySQL backup tool :: Features
- ^ Navicat for MySQL | MySQLに対応したDB管理・開発ツール
- ^ MySQL :: MySQL Workbench: Administration
- ^ Home - Nucleon Software
- ^ Sequel Pro
- ^ Adminer - Database management in a single PHP file
出典
- ^ "Changes in MySQL 8.0.38 (2024-07-01, General Availability)"; 閲覧日: 2024年7月1日; 出版日: 2024年7月1日.
- ^ "Changes in MySQL 9.3.0 (2025-04-15, Innovation Release)"; 閲覧日: 2025年4月15日; 出版日: 2025年4月15日.
- ^ "Changes in MySQL 8.4.5 (2025-04-15, LTS Release)"; 閲覧日: 2025年4月15日; 出版日: 2025年4月15日.
- ^ “Slide 1”. Oracle. 2024年3月6日閲覧。
- ^ “MySQL”. www.mysql.com. 2024年3月5日閲覧。
- ^ “MySQL 8.0 リファレンスマニュアル”. MySQL. 2022年7月3日閲覧。
- ^ “Which Should I Use: MySQL Enterprise or MySQL Community Server?”. MySQL AB. 2009年4月9日時点のオリジナルよりアーカイブ。2009年4月8日閲覧。
- ^ Guy Harrison; Steven Feuerstein (2008). MySQL Stored Procedure Programming. O'Reilly Media. p. 49. ISBN 978-0-596-10089-6
- ^ “Monitoring RDS MySQL performance metrics”. Datadog (2015年10月20日). 2015年12月14日閲覧。
- ^ “MySQL :: InnoDB 1.1 for MySQL 5.5 User's Guide :: C InnoDB Glossary :: ACID”. 2010年12月25日時点のオリジナルよりアーカイブ。2011年1月5日閲覧。
- ^ “Replication”. MySQL. 2020年5月2日閲覧。
- ^ “MariaDB Replication”. MariaDB KnowledgeBase. 2019年3月9日閲覧。
- ^ “MySQL :: MySQL 5.7 Reference Manual :: 16.1.4 MySQL Multi-Source Replication”. dev.mysql.com. 2019年3月9日閲覧。
- ^ “MySQL :: MySQL 5.7 Reference Manual :: 16.3.9 Semisynchronous Replication”. dev.mysql.com. 2019年3月9日閲覧。
- ^ “Semisynchronous Replication”. MariaDB KnowledgeBase. 2019年3月9日閲覧。
- ^ “MySQL Cluster Replication: Multi-Master and Circular Replication”. MySQL. 2020年5月2日閲覧。
- ^ “MySQL University: MySQL Galera Multi-Master Replication”. Oracle Corporation. 2020年5月2日閲覧。
- ^ “MySQL :: MySQL 8.0 Reference Manual :: 18 Group Replication”. dev.mysql.com. 2019年3月9日閲覧。
- ^ “MySQL :: MySQL 8.0 Reference Manual :: 18 Group Replication”. dev.mysql.com. 2019年3月9日閲覧。
- ^ DB-Engines Ranking - popularity ranking of database management systems
- ^ http://www-jp.mysql.com/why-mysql/marketshare/
- ^ a b オープンソフトウェア:第2回オープンソースソフトウェア活用ビジネス実態調査:IPA 独立行政法人 情報処理推進機構
- ^ 451 Group survey highlights user concerns over Oracle's proposed ownership of MySQL
- ^ MySQLのライセンスポリシー
- ^ FOSS License Exception
- ^ MySQL Editions
- ^ 1.5. What Is New in MySQL 5.5
- ^ Oracle>About>Press Room>Oracle Announces General Availability of MySQL 5.6
- ^ Oracle Japan>Media centre home>ニュースリリース>MySQL5.6の一般提供開始を発表
- ^ MySQL 8.0: New Features in Replication
- ^ http://ossipedia.ipa.go.jp/doc/201
- ^ SQL ServerとOSSが勢力拡大の兆し――DBMS市場:ITmedia リサーチインタラクティブ 第6回調査 - ITmedia エンタープライズ
- ^ Supported Platforms: MySQL Database
- ^ Open ESQL
関連項目
- MySQL Cluster
- MySQL Workbench
- ストレージエンジン
- アプリケーションとパッケージ
- MySQLからフォークしたプロジェクト
- MariaDB
- Drizzle (database server)
外部リンク
- MySQL.com
- 日本MySQLユーザ会
- MySQL Reference Manuals
- どのようにデータベースのMySQL Workbenchを使用して作成する - このチュートリアルではデータベースのMySQL Workbenchを使用して作成する方法について説明。
MySQL
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/05 08:20 UTC 版)
「Mac OS X Lion」の記事における「MySQL」の解説
プリインストールされなくなった為、自分でインストールする、またはPostgreSQLが利用可能。
※この「MySQL」の解説は、「Mac OS X Lion」の解説の一部です。
「MySQL」を含む「Mac OS X Lion」の記事については、「Mac OS X Lion」の概要を参照ください。
固有名詞の分類
- mySQLのページへのリンク