MySQLのストレージエンジンはプラガブルになっていて、ユーザが作成したストレージエンジンを使うことができます。と聞いたら皆さん何がしたくなるでしょうか。作ってみたくなりますよね。「自作ストレージエンジン」… なんとも素晴らしく良い響きだと思いませんか?
というわけで、ストレージエンジンを自作する方法について説明していきたいと思います。今回はその第一歩として、EXAMPLEストレージエンジンをビルドして試してみましょう。
環境設定
今回は、MySQL8.0.13をapt-getを使ってインストールして進めております。OSはUbuntu18.04を利用して進めます。
MySQL8.0をインストールするために、公式からAPTのレポジトリを公式のページからダウンロードしてきてインストールします。
dpkgを実行すると下のような画面が表示されますので、MySQL Server & Cluster (Currently selected: mysql-8.0)
が mysql-8.0になっていることを確認して<Ok>
ではなくてOK
を選びましょう。
その後、sudo apt-get install -y
をしてからsudo apt-get install -y mysql
でインストールするとversion8系のMySQLがインストールされます。初期パスワードの設定も途中で行います。
現在インストールされているストレージエンジンを確認する
インストールが終わった時点で、どのようなストレージエンジンが入っているのかをSHOW ENGINES
構文を使って検証してみましょう。
このように表示されると思います。Engineの中には、見知ったInnoDB
やMyISAM
といったストレージエンジンが並んでいると思います。今回は、ここにEXAMPLEエンジンを自力でコンパイルして追加することを目指します。9件であったことを覚えておいてください。
Exampleストレージエンジン
Exampleストレージエンジンは、その名の通りストレージエンジンを作る際の手引きとなるストレージエンジンです。このストレージエンジンをベースにいろいろと作成してみると良いでしょう。ちなみに、このストレージエンジンを使ってテーブルを作成することができますが、データを挿入することはできません。
MySQLのビルドを行ってみる
ストレージエンジンをビルドするのに一番簡単な方法としては、時間がかかるとは思いますが、MySQL全体をビルドしてしまうのが、たぶん一番簡単だと思います。
ソースコードをバージョンと合わせてダウンロードを行います。今回は、MySQL8.0.13のソースコードを公式からダウンロードしてきて適当なディレクトリに展開して進めていきます。
さて、ビルドするにあたっていくつかソフトウェアを追加します。cmake
とncurses
とlibssl
をインストールする必要があります。今回ビルドに使用したOSはubuntuなのでapt-get
を使ってインストールします。
さてここからがビルドの本番です。解凍されてできたディレクトリに移動しcmake .
を実行してみると、以下のようなエラーが発生します。
上記のエラーで、C++ライブラリのBOOSTが足りないと怒られるのですが、今回はBOOSTも一緒にダウンロードしているので-DWITH_BOOST=./boost
とすることで実行できます。またその他にもBOOSTライブラリをダウンロードする方法として、-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp/BOOST
オプションを付ける方法があります。もう一度実行します。
こうするとビルドが始まりますのでしばらく待ちましょう。MySQLのビルドにはメモリーがかなり必要なため、エラーになってしまった場合はメモリを足すか、スワップファイルを作成して、コンパイルが終わるのを待ちましょう。
ちなみに、EXAMPLEストレージエンジンだけをコンパイルしたい場合やスペック的に厳しい場合などは、make
を行うところにexampleオプションを追加してmake example
とすることでEXAMPLEストレージエンジンだけをコンパイルすることもできます。
ビルドしたストレージエンジンをインストールする
今回はtmp
ディレクトリでビルドしたので、正常にビルドが終わっていれば/tmp/mysql-8.0.13/plugin_output_directory
の中にha_example.so
ファイルができていると思います。
このファイルをINSTALL PLUGIN
構文を使ってインストールをするだけなのですが、横着をして絶対パスでそのまま実行してみます。
するとこのようにエラーが発生します。これは、読み込みが認められていないディレクトリから読み込もうとしたためエラーになりました。では続けて、どこからなら読み込みができるのかをSHOW VARIABLE
構文を使って確認してみましょう。
以上のような結果になりました。この結果から/usr/lib/mysql/plugin/
の下に配置すれば良さそうだとわかります。ディレクトリを移動して実行してみましょう。
配置が終わりましたので、MySQLからもう一度インストールを実行してみます。
今度はエラーになりませんでした。SHOW ENGINES
で本当にインストールができているかを確認してみましょう。
一番最初にEXAMPLEストレージエンジンが追加されたことがわかると思います。件数も、最初に表示されていたときと比較して10件に増えていることがわかると思います。また、実際にテーブルを作成することもできます。
インストールしたストレージエンジンをアンインストールしたい場合は、UNINSTALL PLUGIN
構文でアンインストールできます。
ただし、使ってるテーブルが存在した状態でアンインストールをしてしまうと、アンインストールしたときではなくクエリの実行時にエラーになるので注意をしましょう。
まとめ
今回はEXAMPLEストレージエンジンを使って、実際にストレージエンジンをビルドして動かして見るところまで試してみました。ビルドの初回は非常に時間がかかってしまいますが、2回目以降はキャッシュされたファイルが使えるので高速にコンパイルできるようになると思います。みなさんも、ぜひ一度ストレージエンジンを自分でコンパイルして動かしてみてはいかがでしょうか。