laradockでhandlersocketを試してみる 

#今更handlersoket

MySQLをNoSQL化して、爆速な処理を実現するpluginのhandlersocket。（ザックリとした理解）
公開されたのが2010年頃なので、かれこれ10年近く前のことですが、今更試してみようと思いました。

#そうだlaradockを使おう

handlersocketはMySQLの他にMariaDBでも使えます。
今回は初めからpluginにhandlersoket.soが用意されているMariaDBで試します。

手軽にdockerさんで環境を作ろうと思います。
Dockerファイルも便利セットのlaradockを使用します。

ちなみに、環境はwindows10 proでございます。

#やってみよう

とりあえず適当な場所でlaradockをcloneします。
(https://laradock.io/)

```shell
mkdir dev
cd dev
git clone https://github.com/Laradock/laradock.git
```

それからMariaDBのmy.cnfを編集
(以下の内容を追加します)

```sh:laradock/mariadb/my.cnf
[mysqld]
plugin_maturity=beta
plugin-load=handlersocket.so
```

dockerさん立ち上げ

```shell
cd laradock
docker-compose build mariadb
docker-compose up -d mariadb
docker-compose exec mariadb bash
```

mariaさんのバージョン確認

```shell
# mysql --version
mysql  Ver 15.1 Distrib 10.3.14-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
```

handlersocketがpluginに反映されていることを確認。

```mysql:
MariaDB [(none)]> show plugins;
+-------------------------------+----------+--------------------+------------------+---------+
| Name                          | Status   | Type               | Library          | License |
+-------------------------------+----------+--------------------+------------------+---------+
| binlog                        | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| mysql_native_password         | ACTIVE   | AUTHENTICATION     | NULL             | GPL     |
| mysql_old_password            | ACTIVE   | AUTHENTICATION     | NULL             | GPL     |
| wsrep                         | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| CSV                           | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| MEMORY                        | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| MyISAM                        | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| MRG_MyISAM                    | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| CLIENT_STATISTICS             | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INDEX_STATISTICS              | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| TABLE_STATISTICS              | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| USER_STATISTICS               | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| SQL_SEQUENCE                  | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| InnoDB                        | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| INNODB_TRX                    | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_LOCKS                  | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_LOCK_WAITS             | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP                    | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP_RESET              | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMPMEM                 | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMPMEM_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP_PER_INDEX          | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP_PER_INDEX_RESET    | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_BUFFER_PAGE            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_BUFFER_PAGE_LRU        | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_BUFFER_POOL_STATS      | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_METRICS                | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_DEFAULT_STOPWORD    | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_DELETED             | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_BEING_DELETED       | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_CONFIG              | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_INDEX_CACHE         | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_INDEX_TABLE         | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_TABLES             | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_TABLESTATS         | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_INDEXES            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_COLUMNS            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_FIELDS             | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_FOREIGN            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_FOREIGN_COLS       | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_TABLESPACES        | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_DATAFILES          | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_VIRTUAL            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_MUTEXES                | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_SEMAPHORE_WAITS    | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_TABLESPACES_ENCRYPTION | ACTIVE   | INFORMATION SCHEMA | NULL             | BSD     |
| INNODB_TABLESPACES_SCRUBBING  | ACTIVE   | INFORMATION SCHEMA | NULL             | BSD     |
| Aria                          | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| PERFORMANCE_SCHEMA            | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| SEQUENCE                      | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| FEEDBACK                      | DISABLED | INFORMATION SCHEMA | NULL             | GPL     |
| user_variables                | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| partition                     | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| handlersocket                 | ACTIVE   | DAEMON             | handlersocket.so | BSD     |
+-------------------------------+----------+--------------------+------------------+---------+
54 rows in set (0.001 sec)
```

pluginに反映されました。

#ここまでのみちのり
dockerさんでmariaDBを立ち上げようとした段階でちょこちょこ躓いたので、my.cnfの内容はもう少し書き加えてます。
今回記載したのはhandlersocketに関連する設定だけです。

はじめにmy.cnfには「plugin-load」のみ記載していました。
ここでplugin追加がされている予定でした。

```sh:laradock/mariadb/my.cnf
[mysqld]
plugin-load=handlersocket.so
```

しかし、「show plugins;」を実行して確認してみるとhandlersocketさんは不在・・・。
そこで手動で追加してみようとするとエラーが。

```mysql:
MariaDB [(none)]> INSTALL PLUGIN handlersocket SONAME 'handlersocket.so';
ERROR 1126 (HY000): Can't open shared library 'handlersocket.so' (errno: 1, Loading of beta plugin handlersocket is prohibited by --plugin-maturity=gamma)
```

なんでや。
エラーの内容をみると、「plugin-maturityの設定がgammaでhandlersocketはbataだから禁止だよ」って感じでしょうか？

そこでmariaDBのサイトを確認。
(https://mariadb.com/kb/en/library/server-system-variables/#plugin_maturity)

> plugin_maturity
> ・Description: The lowest acceptable plugin maturity. MariaDB will not load plugins less mature than the specified level.
> ・Commandline: --plugin-maturity=level
> ・Scope: Global
> ・Dynamic: No
> ・Type: enum
> ・Default Value: One less than the server maturity (>= MariaDB 10.3.3), unknown (<= MariaDB 10.3.2)
> ・Valid Values: unknown, experimental, alpha, beta, gamma, stable
> ・Introduced: MariaDB 5.2.1

このplugin-maturityをbataにすれば良さげ、ということでmy.cnfに追加。

```sh:laradock/mariadb/my.cnf
[mysqld]
plugin_maturity=beta  # <- new!
plugin-load=handlersocket.so
```

これで上手く反映されるようになりました。

#つづく?
まだ実際にhandlersocketを動かしてはいないので、動かしてみようと思います。