MySQL Workbench を使ってみた

# 背景

Google Alert から mysql キーワードで引っかかった下記 Web ページをチェックしていたところ、MySQL Workbench なる存在を初めて知ったので、試しに使ってみることにした。

https://www.mysql.com/news-and-events/web-seminars/mysql-80-for-beginners-workbench-ja/

# 試用前の期待値

MySQL Workbench の DL ページを見る限り、DB を可視化するツールのようだ。
https://www.mysql.com/jp/products/workbench/

筆者は普段、DB のテーブルや構造のチェックのために Sequel Pro を使用しているが、それを代替できる可能性があるか、確認したいと思う。

特に、Sequel Pro の不満ポイントである

- 接続が切れると、ソフトフェアそのものが落ちる
- クエリが実際の DB に反映されない
- Sequel Pro でチェックした構造と、コマンドラインでチェックした構造にギャップがある

ここら辺をカバーしてくれていたら最&高。

また、久々に新しいソフトに触るので、単純にワクワクしているw

# 実際に使ってみた

MySQL Workbench を起動したところ、

```
Unsupported Operating System
```

不吉なメッセージがw
macOS 対応版をダウンロードしたはずだが、不安定な要素を含んでいるのだろうか・・・。
気を取り直して、使ってみる。

DB の設定を修正したが、ポップアップが出て

```
Cannot Connect to Database Server
```

と言われてしまった・・・。

コマンドラインで MySQL にログインできるから、大丈夫なはずだが・・・。
MySQL の使い方を思い出しながら、思考錯誤してみる。

まずは、アクセス権を調べてみる。

```
mysql> USE mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT Host, User FROM user;
+-------------------+-------------+
| Host              | User        |
+-------------------+-------------+
| 127.0.0.1         | agent1      |
| 127.0.0.1         | root        |
| ::1               | root        |
| localhost         |             |
| localhost         | glaciermelt |
| localhost         | root        |
| macbook-pro.local |             |
| macbook-pro.local | root        |
+-------------------+-------------+
8 rows in set (0.01 sec)
```

うん、大丈夫だよな。

MySQL Workbench の Manage Server Connections で Test Connection してみると、

```
Failed to Connect to MySQL at 127.0.0.1:13306 with user agent1

Table 'performance_schema.session_status' doesn't exist
```

どうやら、 performance_schema データベースに、 session_status テーブルがないのが原因のようだ。
Sequel Pro で確認すると、確かに session_status テーブルはない。
これって作れるのかな？

下記の記事を参考に、対処してみよう。

https://katblog.manadream.net/index.php/2019/03/05/mysql-doesnt-exist-error/

`mysql_upgrade` コマンドが鍵っぽい。

```
$ mysql_upgrade -uagent1 -p -h127.0.0.1 -P13306
Enter password:
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.gtid_executed                                OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.server_cost                                  OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Upgrading the sys schema.
Checking databases.
agent_one_udb.udb_admin                            OK
agent_one_udb.udb_admin_password                   OK
agent_one_udb.udb_admin_session                    OK
agent_one_udb.udb_user                             OK
agent_one_udb.udb_user_password                    OK
agent_one_udb.udb_user_session                     OK
keikoba_app_development.active_storage_attachments OK
keikoba_app_development.active_storage_blobs       OK
keikoba_app_development.ar_internal_metadata       OK
keikoba_app_development.bookmarks                  OK
keikoba_app_development.favorites                  OK
keikoba_app_development.posts                      OK
keikoba_app_development.schema_migrations          OK
keikoba_app_development.users                      OK
keikoba_app_test.active_storage_attachments        OK
keikoba_app_test.active_storage_blobs              OK
keikoba_app_test.ar_internal_metadata              OK
keikoba_app_test.bookmarks                         OK
keikoba_app_test.favorites                         OK
keikoba_app_test.posts                             OK
keikoba_app_test.schema_migrations                 OK
keikoba_app_test.users                             OK
sys.sys_config                                     OK
Upgrade process completed successfully.
Checking if update is needed.
```

お。このコマンドを実行したら、確かに performance_schema データベースに、session_vaiables テーブルが生成されてる。
これで、MySQL Workbench で接続できるかな？

先ほどと同様に Test Connection してみると、

```
Failed to Connect to MySQL at 127.0.0.1:13306 with user agent1

Native table 'performance_schema'.'session_status' has the wrong structure
```

接続できず。
今度は、 session_status の構造が適切でないようだ。

下記記事によると、再起動すると良さげな可能性がありそうだ。

https://blog.jicoman.info/2015/11/mysql_upgrade/

service コマンドは使えないっぽいので、色々試してみる。
(4ヶ月前にかなりいじったはずだが、かなり忘れてる。)

下記の記事を参考に、 mysql コマンドが使えそうなことが分かった。

https://freeheroblog.com/mac-mysql/

色々試してみる。

```
// MySQL サーバーの状態を確認する
$ mysql.server status
 SUCCESS! MySQL running (1359)

// サーバーは動いているようだ
// mysql のバージョンを確認してみる
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.35, for osx10.15 (x86_64) using  EditLine wrapper

// 動かしているバージョンと違うな。何でだっけ・・・。
// 一先ず、サーバーを停止してみる
$ mysql.server stop
Shutting down MySQL
.... SUCCESS!

// お、うまく停止できた
// ちゃんと停止しているか、確認する
$ mysql.server status
 SUCCESS! MySQL running (28697)

// あれ、動いている何でだろう・・・。
// homebrew で動いているのかな？こちらも停止してみる
$ brew services stop mysql

// 停止したかな？
$ mysql.server status
 SUCCESS! MySQL running (28697)

// 停止してない。何故だ・・・。
// あ。もしかして、バージョン指定が必要？ @5.7 で停止してみる
$ brew services stop mysql@5.7
Stopping `mysql@5.7`... (might take a while)
==> Successfully stopped `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)

// お。停止したっぽい
// 念の為、ダメおしで停止したか確認する
$ mysql.server status
 ERROR! MySQL is not running

// うん。停止してるね
// homebrew でどのバージョンをインストールしたか、念の為確認する
$ brew search mysql
==> Formulae
automysqlbackup       mysql++               mysql-client@5.7      mysql-sandbox         mysql@5.6 ✔           mysqltuner
mysql                 mysql-client          mysql-connector-c++   mysql-search-replace  mysql@5.7 ✔           qt-mysql
==> Casks
mysql-connector-python                       mysql-utilities                              navicat-for-mysql
mysql-shell                                  mysqlworkbench                               sqlpro-for-mysql

// @5.6 と @5.7 を入れていたか
// メインで使ってるのは @5.7 だし、 @5.6 はアンインストールしとこう
$ brew uninstall mysql@5.6
Uninstalling /usr/local/Cellar/mysql@5.6/5.6.51... (344 files, 156.2MB)

// アンインストールした
// 念の為、インストール状況を確認する
$ brew search mysql
==> Formulae
automysqlbackup       mysql++               mysql-client@5.7      mysql-sandbox         mysql@5.6             mysqltuner
mysql                 mysql-client          mysql-connector-c++   mysql-search-replace  mysql@5.7 ✔           qt-mysql
==> Casks
mysql-connector-python                       mysql-utilities                              navicat-for-mysql
mysql-shell                                  mysqlworkbench                               sqlpro-for-mysql

// よしよし、 @5.6 はアンインストールできてる
// よし。だいぶ遠回りしたが、 mysql@5.7 を homebrew で起動する
$ brew services start mysql@5.7
==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)

// よし、起動できた
// 念の為、起動できたか確認する
$ mysql.server status
 SUCCESS! MySQL running (50258)
```

さて、もう一度 Test Connection してみる。

```
Successfully made the MySQL connection

Information related to this connection:

Host: 127.0.0.1
Port: 13306
User: agent1
SSL: enabled with ECDHE-RSA-AES128-GCM-SHA256

A successful MySQL connection was made with
the parameters defined for this connection.
```

よっしゃ！　接続できた！
やっぱり、MySQL は詰まりポイントが凝縮してるな・・・。
後輩ができたら、ここら辺をちゃんと教えよう。

# 使用感について

さて、やっと DB の中身を覗けるようになった訳だが、使い勝手はどうだろうか。

結論、かなり使えそうです。

DB の中身・構造情報はもちろん、 DDL も見れる。

地味に嬉しいのが、サーバーの状態も全て可視化してくれるところ。
Host, Socket, Version などの情報も一覧化してくれるので、これはかなりありがたい。
また、Users and Privileges で User Account 情報、Priviledges 情報も一覧化してくれる。
これは神。いやーすごい。

まあ、コマンドを打てば手に入る情報ではありますが、それが不要なので個人的にはかなりナイスなソフトウェアですね。
Sequel Pro の方が手軽ではありますが、MySQL Workbench に完全移行してもいいレベルかもです。