MySQL Shellを入れてみた

MySQL Innovation Dayで聞いたMySQL Shellを入れてみました。
# 前提条件
CentOS Linux release 7.2.1511 (Core)
MySQL <font color="red">5.7.12</font>

インストール済みパッケージ一覧
<pre>
mysql-community-client-5.7.12-1.el7.x86_64
mysql-community-common-5.7.12-1.el7.x86_64
mysql-community-devel-5.7.12-1.el7.x86_64
mysql-community-libs-5.7.12-1.el7.x86_64
mysql-community-libs-compat-5.7.12-1.el7.x86_64
mysql-community-server-5.7.12-1.el7.x86_64
mysql57-community-release-el7-7.noarch
</pre>

# mysqlxプラグインの有効化
<pre class="lang:default decode:true " >
     # mysql -u root -p
mysql> install plugin mysqlx soname 'mysqlx.so';
</pre>

## ポート開け＆再起動
<pre>
# firewall-cmd --permanent --add-port=33060/tcp
# firewall-cmd --reload
# systemctl restart mysqld
</pre>
## 起動確認
<pre>
# lsof -i:33060

COMMAND   PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
mysqld  16894 mysql   22u  IPv4 9234581      0t0  TCP *:33060 (LISTEN)
</pre>
33060でLISTENしてくれました。

プラグインも確認
<pre>
mysql> show plugins;

+----------------------------+----------+--------------------+-----------+---------+
| Name                       | Status   | Type               | Library   | License |
+----------------------------+----------+--------------------+-----------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL      | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL      | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL      | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL      | GPL     |
| MEMORY                     | 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_TEMP_TABLE_INFO     | 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     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL      | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL      | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL      | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL      | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL      | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL      | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL      | GPL     |
| ngram                      | ACTIVE   | FTPARSER           | NULL      | GPL     |
| mysqlx                     | ACTIVE   | DAEMON             | mysqlx.so | GPL     |
+----------------------------+----------+--------------------+-----------+---------+
</pre>
mysqlx がACTIVEになっています。

# MySQL Shellのインストール
RPMで入れるために、まずはreleaseファイルを変更。

<pre>
# yum remove mysql57-community-release
# rpm -ivh http://repo.mysql.com/yum/mysql-tools-preview/el/7/x86_64/mysql57-community-release-el7-8.noarch.rpm
</pre>
以下のリポジトリ定義が追加されます。

```text:/etc/yum.repos.d/mysql-community.repo
[mysql-tools-preview]
name=MySQL Tools Preview
baseurl=http://repo.mysql.com/yum/mysql-tools-preview/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
```

インストールします。

<pre>
# yum -y install mysql-shell --enablerepo=mysql-tools-preview
# rpm -ql mysql-shell

/usr/bin/mysqlsh
/usr/share/doc/mysql-shell-1.0.3
/usr/share/doc/mysql-shell-1.0.3/COPYING.txt
/usr/share/doc/mysql-shell-1.0.3/README
/usr/share/mysqlsh/modules/js/mysql.js
/usr/share/mysqlsh/modules/js/mysqlx.js
</pre>

## 接続確認

※testデータベースは作成済み

<pre>
# mysqlsh --sql --js --user=root test
mysql-js> db.createCollection('test_docstore')
<Collection:test_docstore>
mysql-js> db.collections
{
    "test_docstore": <Collection:test_docstore>
}

mysql-js> db.test_docstore.add ([ {'key1': 'val1'},{'key2': 'val2','key3': 'val3'}])
Query OK, 2 items affected (0.19 sec)

mysql-js> db.test_docstore.find()
[
    {
        "_id": "3632a54d4b17e611344700248c38799d",
        "key2": "val2",
        "key3": "val3"
    },
    {
        "_id": "e230a54d4b17e611344700248c38799d",
        "key1": "val1"
    }
]
2 documents in set (0.00 sec)
</pre>
"test_docstore"というコレクションを作成して適当なデータを入れました。

mysqlクライアントから接続してテーブルとして確認。
<pre>
mysql> desc test.test_docstore;
+-------+-------------+------+-----+---------+------------------+
| Field | Type        | Null | Key | Default | Extra            |
+-------+-------------+------+-----+---------+------------------+
| doc   | json        | YES  |     | NULL    |                  |
| _id   | varchar(32) | NO   | PRI | NULL    | STORED GENERATED |
+-------+-------------+------+-----+---------+------------------+
2 rows in set (0.00 sec)

mysql> select * from test.test_docstore;
+-----------------------------------------------------------------------------+----------------------------------+
| doc                                                                         | _id                              |
+-----------------------------------------------------------------------------+----------------------------------+
| {"_id": "3632a54d4b17e611344700248c38799d", "key2": "val2", "key3": "val3"} | 3632a54d4b17e611344700248c38799d |
| {"_id": "e230a54d4b17e611344700248c38799d", "key1": "val1"}                 | e230a54d4b17e611344700248c38799d |
+-----------------------------------------------------------------------------+----------------------------------+
2 rows in set (0.00 sec)
</pre>

とりあえず動かすところまで。
面白そうなので、GAになるのが待ち遠しいです。