MySQL 5.6 で EXAMPLE ストレージエンジンを使ってみる

EXAMPLE ストレージエンジンは,ストレージエンジンを作成する人のためのテンプレートです.詳しくはこちら.
http://dev.mysql.com/doc/refman/5.6/en/example-storage-engine.html

今回は,MySQL 5.6 をソースからインストールすることを前提に EXAMPLE ストレージエンジンの導入について記します.
MySQL 5.6 の基本的なインストール方法はこちらをどうぞ.
http://d.hatena.ne.jp/laysakura/20130209/1360422816

インストール時の設定

インストールの際,cmake のフラグに "-DWITH_EXAMPLE_STORAGE_ENGINE" を付けます.

$ cmake -DWITH_EXAMPLE_STORAGE_ENGINE

あとは通常通り make && make install です.

インストール後の設定

mysqld サーバが立ち上がっていて,mysql クライアントで接続できていることを前提とします.
MySQL で使用できるストレージエンジンの一覧は,"show engines" コマンドで確認できます.

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

多分現時点で EXAMPLE ストレージエンジンは見えていないと思います.ですので,これから EXAMPLE ストレージエンジンを使用可能にする方法を書きます.

まず,"$basedir/lib/plugin/ha_example.so" が存在してることを確認して下さい.当環境では "/usr/local/mysql/lib/plugin/ha_example.so" がありました.
この状態で,MySQL のシェルに -u root として入り,次のコマンドを実行します.

mysql> INSTALL PLUGIN EXAMPLE SONAME 'ha_example.so';
Query OK, 0 rows affected (0.01 sec)

これで晴れて EXAMPLE ストレージエンジンが使用可能になったはずです.

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| EXAMPLE            | YES     | Example storage engine                                         | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

使ってみる

実際に使ってみましょう.
http://dev.mysql.com/doc/refman/5.6/en/example-storage-engine.html
のページと同じ事をします.

mysql> CREATE TABLE test (i INT) ENGINE = EXAMPLE;
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO test VALUES(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM test;
Empty set (0.00 sec)

上記ページの記述と異なり,INSERT はエラーとなりません.仕様が変わったのでしょうかね?