TOP>企業情報>コラム>技術情報>はじめましてMySQL! Vol.3

はじめましてMySQL! Vol.3

はじめましてMySQL!

第3回目(最終回)となる今回は、MySQLと互換性を持つMariaDBについて解説します。

(全3回連載)

Vol.3 MySQLと互換性をもつ『妹分』、MariaDBとは?

MySQLと同じ親から生まれたデータベース


MariaDBは、MySQLのオリジナルコード作者であるMichael "Monty" Widenius氏が立ち上げたプロジェクトによって開発されているオープンソースのデータベースです。MySQLのブランチに相当し、MySQLのソースコードをベースにいくつかの機能を追加する形でリリースされています。

MariaDB誕生のきっかけは、当時のサン・マイクロシステムズ社によるMySQL Ab社の買収です。Widenius氏は開発指針の相違などから2009年にサン・マイクロシステムズ社を退社し、Monty Program Ab社を立ち上げてMariaDBの開発を開始しました。Monty Program Ab社には、Monty氏をはじめとするMySQL Ab社出身の技術者が複数名在籍しています。

MySQLの『My』は英単語ではなくWidenius氏の娘の名前から取られたものですが、MariaDBの『Maria』も同じです。生みの親が同じでソースコードのベースも同じという両者はまさに姉妹と呼べるデータベースです。

MariaDBの特徴

  • MySQLのソースコードをベースにいくつかの機能を追加
  • MySQLの不具合修正を定期的に反映
  • MySQLとの高い後方互換性を持つ
  • マルチプラットフォーム(Linux、Windows、Solaris、MacOS X)
  • コミュニティ版(GPL v2)のみ


2012年8月現在、最新のバージョンはMariaDB 5.5です。MySQLのブランチであるという性質上、MySQLの最新バージョンを後から追いかける形でリリースされています。例えば、MySQL 5.5がリリースされたのは2010年の12月ですが、MariaDB 5.5は2012年の4月であり、1年半近くの差があります。

MySQLとMariaDBの互換性

MySQLとMariaDBの互換性

MySQLとMariaDBの互換性は非常に高く、データや表定義ファイルなどはそのまま移行して使うことができます。クライアントAPIやプロトコルも同じで、インストールした際のファイル名、ファイルパスも非常によく似ています。

第3回(最終回)となる今回は、MariaDBのインストール、初期設定方法について解説します。

MariaDBのインストール方法


MariaDBに関する情報は、Monty Program Ab社が中心となって運営しているAskMonty.org に集約されており、ナレッジベースの検索やMariaDBのダウンロードが行えるようになっています。

AskMonty.orgのトップページ

AskMonty.orgのトップページ

『MariaDB Downloads』のアイコンをクリックすると、MariaDBのバージョンを選択する画面が表示されます。今回は最新のMariaDB 5.5をダウンロードします。

MariaDBのバージョン選択画面

MariaDBのバージョン選択画面

ダウンロード可能なファイルの一覧が表示されたら、画面右側のチェックボックスからOSとパッケージタイプを選択します。今回はLinux 64bit環境にインストールを行うので、『Generic Linux』のチェックボックスを選択し、tar.gzファイルをダウンロードします。

MariaDB 5.5のダウンロード画面

MariaDB 5.5のダウンロード画面

ユーザ情報を入力する画面が表示されます。全ての情報を入力して『Submit & continue to download』をクリックするか、何も情報を入力せず『No thanks, just take me to the download』をクリックするとダウンロードが開始されます。

ユーザ情報入力画面

ユーザ情報入力画面

ダウンロードが完了したら、MariaDBのインストールを開始します。インストール方法はMySQLとほとんど同じです。まず、rootユーザでMariaDB用のグループとユーザを作成します。グループ名、ユーザ名ともに何でも構いませんが、今回はMySQLと同じく”mysql”という名前にします。もちろん“mariadb”という名前でも構いません。

SQL


ユーザの作成が完了したら、ダウンロードしたtar.gzのバイナリをインストール先となるディレクトリに移動して展開します。今回は/usr/localをインストール先とします。

SQL


tar.gzファイルを展開すると、mariadb-<バージョン>-<OS>というディレクトリが生成されます。

SQL


MySQLと同じくシンボリック・リンクを作成してシンプルな名前をつけておくと、モジュールの入れ替えが簡単に行えます。

SQL


これで/usr/local/mysqlにMariaDBがインストールされました。MySQLとMariaDBのディレクトリ構造を比較してみましょう。

ディレクトリ構造


※青字がディレクトリ

両者を並べてみると、ディレクトリ構造が全く同じであることが分かります。MySQLでお馴染みのディレクトリがMariaDBにもそのまま存在しているため、一見どちらがMariaDBか区別できないほどです。それほどMySQLとMariaDBはよく似ています。

最後に、mysql_install_dbスクリプトを実行してデータベースを初期化し、システムテーブルを作成します。

SQL


これでMariaDBのインストールは終了です。

MariaDBの初期設定方法


MariaDBの初期設定方法はMySQLとほとんど同じです。まずはオプション設定ファイルであるmy.cnfを作成します。

①サンプルファイルの選択

MariaDBのインストール直後はmy.cnfファイルが存在しないので、support-filesディレクトリにあるサンプルをコピー(リネーム)して使います。サンプルは複数用意されているため、サーバーのメモリ量を基準にどれを使用するか判断します。サンプルに記載されているオプションの値はMySQLとMariaDBでほとんど変わりませんが、スレッドのスタックサイズ(thread_stack)についてはMariaDBがわずかに高く240KBに設定されています。

オプション設定ファイルのサンプル

オプション設定ファイルのサンプル

②サンプルファイルのコピー

使用するサンプルが決まったら、続いて配置場所を考えます。今回はmy-huge.cnfを/usr/local/mysql/my.cnfとしてコピー(リネーム)して使用します。

SQL


③my.cnfの確認と編集

コピーが完了したら、my.cnfの中身を確認します。

SQL


MySQLと同じくデフォルトでInnoDB関連のオプションがコメント化(無効化)されているため、InnoDBを使用する場合は、以下のようにコメントを解除してください。

SQL


また、MariaDBのデフォルトキャラクタセットはlatin1になっているので、このままでは日本語のデータを扱うことができません。日本語を使用する場合は、[mysqld]と[client]に以下のオプションを追加します。

SQL


④MariaDBの起動

MySQLと同じくmysqld_safeスクリプトを使用します。そのまま実行してしまうと、MySQLが停止するまで端末のプロンプトが戻らなくなるため、『&』をつけてバックグラウンドで実行するようにしてください。

SQL


⑤MariaDBに接続

MariaDBが起動したら、mysqlコマンドを使って接続してみましょう。接続方法はMySQLと全く同じです。管理者権限を持つrootユーザがあらかじめ作成されているので、-uオプションの引数にrootを指定して接続します。

SQL


プロンプトがMariaDBとなっておりMySQLと少し異なりますが、基本的に同じコマンドを使うことができます。例えば、statusコマンドを実行すると現在のステータスが表示されます。

SQL


MariaDBに接続できることを確認したら、mysql_secure_installationスクリプトを実行してrootユーザのパスワード設定や匿名ユーザの削除などを行います。

SQL


パスワードを設定したので、再度MariaDBに接続してみます。パスワードの入力を求められるので、先ほどmysql_secure_installationスクリプトで設定した値を入力して接続します。

SQL


これでMariaDBの基本的な初期設定は終了です。プロンプトやメッセージなどがわずかに違うだけで、MySQLと手順は変わりません。

MySQLとMariaDBの違い


これまでMariaDBのインストールと初期設定方法について解説してきましたが、あまりにもMySQLと似ているので「一体何が違うの?」と思った方も多いと思います。

MySQLとMariaDBの違いはAskMonty.orgのナレッジベース にまとめられていますが、細かい違いが多いのでいくつかピックアップして紹介します。

MariaDB versus MySQL -Features

MariaDB versus MySQL -Features

①ストレージエンジンの追加、変更

MySQLとMariaDBのストレージエンジンを比較すると、MariaDBでいくつかストレージエンジンが追加または変更されていることが分かります。(青色部分)

MySQL 5.5のストレージエンジン(Engine,Comment列のみ抜粋)

SQL


MariaDB 5.5のストレージエンジン(Engine,Comment列のみ抜粋)

SQL


一見分かりにくいですが、MySQLのデフォルト・ストレージエンジンであるInnoDBがMariaDBではPercona社のXtraDBに置き換わっています。XtraDBはInnoDBをベースに開発されているストレージエンジンで、トランザクションや行レベルロックに対応しています。MariaDBからはInnoDBというストレージエンジン名で認識されているため、特にXtraDBという名前を意識して使う必要はありません。

同じように、FederatedストレージエンジンもFederatedXに置き換わっています。Federatedでは未サポートだったトランザクションやパーティションに対応したのがFederatedXです。このように既存のストレージエンジンに機能を追加して提供するというのが、ブランチであるMariaDBならではのユニークなところです。

また、全く新しいストレージエンジンであるAriaも実装されています。AriaはMyISAMをベースにしたもので、MyISAM、MERGE、MEMORYストレージエンジンを開発したエンジニアがコアメンバーとなってプロジェクトが進められています。まだ開発中という印象が強いストレージエンジンですが、将来的にはMariaDBのデフォルトストレージエンジンになることを目指しており、トランザクションがサポートされる予定です。既にMyISAMでは対応できなかったクラッシュセーフが実装されており、障害発生時に自動でリカバリ処理を行ってくれます。

②オプティマイザの強化

MariaDBでは、SQLの実行計画を決定するオプティマイザに大きく手が加えられています。MySQLとMariaDBの比較 を見ると、ディスクアクセスや結合、サブクエリなどで選択される実行計画のパターンが多いことが分かります。

Optimizer Feature Comparison Matrix

Optimizer Feature Comparison Matrix


これらの変更はクエリを高速化する目的で行われています。例えば、MariaDB 5.3から実装されているサブクエリ・キャッシュを使用することで、MySQLがあまり得意ではないと言われている相関サブクエリを高速に処理することができます。 DBT-3ベンチマークの表を使用し、サブクエリキャッシュの効果を測定してみます。

相関サブクエリの例(行数:150,000、表サイズ:約30MB)

SQL

応答時間の比較


サブクエリ・キャッシュがない状態だと、SELECTの結果が返るまでに900秒以上かかってしまいますが、ONにするとわずか2秒で済みます。サブクエリ・キャッシュの実体はクエリの結果を格納した一時表であるためtmp_table_sizeやmax_heap_table_sizeの設定によっては発動しないこともありますが、うまく活用すれば素早い検索結果を得られる可能性があります。

③その他の機能追加

MariaDBでは、MariaDB 5.2から5.3にかけて大きく機能追加が行われました。例えば、MariaDB 5.2ではINFORMATION_SCHEMAに4つの表が追加され、SELECT文でユーザや表、索引の統計情報を参照できるようになっています。

その他の機能追加


以下がCLIENT(USER)_STATISTICSの出力例です。クライアントやユーザごとの処理量、処理傾向を把握することができます。

SQL


TABLE(INDEX)_STATISTICSでは、参照/更新された表の行数、索引の行数が表示されます。「更新が多い割に参照されている索引の行数が少ない」といったことが起きていないか、確認することができます。

SQL


最後に


今回はMariaDBのインストール方法と特徴について解説しました。MySQLと非常によく似ているため、MySQLを触ったことがある方であれば簡単に理解できたのではないでしょうか。

この記事を書いた時点ではMySQLとMariaDBのバージョンが共に5.5と同じになっていますが、MySQL 5.6がリリースされると機能や性能で差が出てくるはずです。今後も様々なオープンソース・データベースに関する検証を行い、活用のヒントとなるような情報を提供したいと思います。

『はじめましてMySQL!』の連載は今回が最終回となります。記事を読んでいただいた皆様、本当にありがとうございました!


執筆者紹介

岸和田 隆

岸和田 隆(Takashi Kishiwada)

株式会社アシスト データベース技術本部

アシスト入社後、Oracle Database の研修講師、フィールド・ サポート、新バージョンの検証を経て、2007年 自社ブランド 「DODAI」の準アプライアンス製品の企画・開発、2009年 PostgreSQL、2011年 EDB Postgres、MySQL / MariaDB の事業立上を担当。 現在は「データベースのアシスト」を目指した活動を行っている。

岸和田の紹介記事はこちら



関 俊洋

関 俊洋(Toshihiro Seki)

株式会社アシスト データベース技術本部

2006年、株式会社アシスト入社。データベース・システムの構築や運用トラブルの解決といったフィールド・サポート業務を経験し、その後は新製品の検証やハードウェアとデータベースを組み合わせたソリューション(DODAI)の立ち上げに従事。現在はデータベースの価値や魅力を伝えるための執筆・講演活動を行っている。『SQL逆引き大全363の極意』共著。

関の紹介記事はこちら

連載記事一覧


Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る