MySQL Shell をWindowsに入れてみる
先日参加してきたMySQL Technology Cafe #7でMySQL Shellって何?どんなことできるの? といった初心者向けの話がされるというので聞いて来ました。
今回はそこから学んだこと、およびハマってしまったWindowsでの設定について軽く触れておきます。
(普段LinuxなのでWindowsはすっかりわからんちんになってた…)
セッションで使われた資料
資料と当日の講義から感じた思いとしては
- MySQL ShellってInnoDB Clusterの管理をするのに必要なものってイメージで、それを使わないなら必要ないと思われてる
- でも、そもそものコンセプトとしてはMySQL Utilitiesから派生してできたもので、色々なことができるもの
- それなのにMySQL大好きな人たちにすら前述の認知しかされてないのでもったいない!
もっと知ってもらいたい!
- JavaScript,Python,SQLどんな形でも簡単にDBにつないで作業できる
- MySQLのバージョンアップグレードチェッカー機能がある
- XdevAPIでスキーマレスJSONドキュメントの操作ができる
- パラレルデータインポートができる
- JSONデータのインポートができる
- データの出力形式を色々選べる
- バッチとして使える
- pluginを追加すればここにない機能が追加できる!
- 最新機能のReplica Setの管理にも使える(構築・手動HAとか)
- イメージとしてはこちらを参照
今回の講義では、来ているメンバーが濃い目(笑)と思ったことからプラグイン部分とRepluca Setの部分に焦点をあてたらしい。
(実際はその濃い目の人たちもMySQL Shellって普段全然触らないから何それおいしいの?って感じで温度差があったのですが)
インストール前のおススメ
https://insidemysql.com/mysql-shell-8-0-19/ https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-configuring-options.html
最新のMySQL Shellを使う!
最新を使う理由としては新しいほうがより便利になっていっていることから。
実行履歴を保存しよう!
shell.options.setPersist を使って構成ファイルへ設定を保存することができる。
実行履歴を保存するのであれば、
MySQL JS > shell.options.set('history.maxSize', 5000) MySQL JS > shell.options.setPersist('useWizards', 'true') MySQL JS > shell.options.setPersist('history.autoSave', 1)
- MySQL Shellコード履歴に保存するエントリの最大数を5000にセットし、
- ウィザードモードを有効にして、構成ファイルへ設定を保存
- MySQL Shellを終了するときに、MySQL Shellコード履歴のエントリを保存(true)するように構成ファイルへ設定を保存
とやるらしい。
デフォルトのモードを設定しよう(defaultMode)
(後述のMySQL Shellのセットアップ終わってから戻ってきて試してみてください)
まず、現状を確認してみよう。
mysqlshと打ってMySQL Shellを起動。
shell.と打って、そのあとTabを二回たたくと候補が表示される
MySQL JS > shell. addExtensionObjectMember() options connect() parseUri() createExtensionObject() prompt() deleteAllCredentials() reconnect() deleteCredential() registerGlobal() disablePager() registerReport() dumpRows() reports enablePager() setCurrentSchema() getSession() setSession() help() status() listCredentialHelpers() storeCredential() listCredentials() unparseUri() log()
この中からとりあえずオプション(option)を選択して同様に二回Tabをタタンとたたく。
MySQL JS > shell.options. autocomplete.nameCache interactive batchContinueOnError logLevel credentialStore.excludeFilters oci.configFile credentialStore.helper oci.profile credentialStore.savePasswords outputFormat dba.gtidWaitTimeout pager dba.logSql passwordsFromStdin defaultCompress resultFormat defaultMode sandboxDir devapi.dbObjectHandles showColumnTypeInfo history.autoSave showWarnings history.maxSize useWizards history.sql.ignorePattern verbose
じゃあ、defaultModeを見てみよう。
MySQL JS > shell.options.defaultMode none
今は何も設定されていないらしいのでSQLモードにしてみる。
MySQL JS > shell.options.setPersist('defaultMode', 'SQL') MySQL JS > shell.options.defaultMode sql
一回抜けて入りなおしてみる。
MySQL JS > \q Bye! C:\Users\takayuki>mysqlsh MySQL Shell 8.0.19 Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type '\help' or '\?' for help; '\quit' to exit. MySQL SQL >
確かにSQLモードになった。
こんな感じで設定変更が色々できそうだ。
MySQLシェルオプション
他にも色々な設定変更ができるので以下参照。
optionName | DefaultValue | Type | Effect |
---|---|---|---|
autocomplete.nameCache | TRUE | ブール値 | 自動補完のデータベース名のキャッシュを有効にします。 |
batchContinueOnError | FALSE | ブール値(読み取り専用) | SQLバッチモードでは、エラーが見つかった場合、処理を強制的に続行します。 |
dba.gtidWaitTimeout | 60 | 0より大きい整数 | AdminAPI操作で必要な場合に、GTIDトランザクションが適用されるのを待機する秒単位のタイムアウト(InnoDBクラスターの操作を参照 ) |
dba.logSql | 0 | 0から2の範囲の整数 | AdminAPI操作によって実行されるSQLステートメントをログに記録します(第8章「 MySQLシェルのロギングとデバッグ」を参照)。 |
defaultCompress | FALSE | ブール値 | すべてのグローバルセッションで可能であれば、クライアントとサーバー間で送信される情報の圧縮を有効にします(クラシックMySQLプロトコル接続のみ)。 |
defaultMode | None | 文字列(sql、js、またはpy) | MySQLシェルの起動時に使用するモード(SQL、Javascript、またはPython)。 |
devapi.dbObjectHandles | TRUE | ブール値 | DevAPI dbオブジェクトのテーブル名とコレクション名のハンドルを有効にします。 |
history.autoSave | FALSE | ブール値 | MySQL Shellを終了するときに、MySQL Shellコード履歴のエントリを保存(true)またはクリア(false)します( セクション5.5「コード履歴」を参照)。 |
history.maxSize | 1000 | 整数 | MySQL Shellコード履歴に保存するエントリの最大数。 |
history.sql.ignorePattern | IDENTIFIED : PASSWORD | 文字列 | これらのパターンに一致する文字列は、MySQL Shellコード履歴に追加されません。 |
interactive | TRUE | ブール値(読み取り専用) | 対話モードを有効にします。 |
logLevel | Requires a value | 1から8の範囲の整数 | アプリケーションログのログレベルを設定します(第8章「 MySQLシェルのログとデバッグ」を参照)。 |
pager | None | 文字列 | 指定された外部ポケットベルツールを使用して、テキストと結果を表示します。ツールのコマンドライン引数を追加できます(セクション4.6「ページャーの使用」を参照 )。 |
passwordsFromStdin | FALSE | ブール値 | stdin端末の代わりにパスワードを読み取ります。 |
resultFormat | table | 文字列(table, 水平タブ区切り, 垂直タブ区切り, json | json/pretty, ndjson | json/raw, json/array)|結果セットを印刷するためのデフォルトの出力形式( セクション5.7「出力形式」を参照)。 |
sandboxDir | プラットフォームに依存 | 文字列 | サンドボックスディレクトリ。デフォルトはWindowsでは C:\Users\MyUser\MySQL\mysql-sandboxes であり、Unixシステムでは $HOME/mysql-sandboxes です。 |
showColumnTypeInfo | FALSE | ブール値 | SQLモードでは、結果セットの列メタデータを表示します。 |
showWarnings | TRUE | ブール値 | SQLモードでは、SQL警告があれば自動的に表示します。 |
useWizards | TRUE | ブール値 | ウィザードモードを有効にします。 |
verbose | 1 | 0から4の範囲の整数 | コンソールへの詳細出力を有効にし、詳細レベルを設定します(第8章「 MySQLシェルのロギングとデバッグ」を参照)。 |
参照:https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-configuring-options.html
Windows でのMySQL Shellのセットアップ
さて、現場でちょっとハマったセットアップの話。
自分が使ったのはWindowsマシンだったのでその方法を以下記載。
1. インストーラをダウンロード
- MySQL Community Downloads MySQL Shellからダウンロードします。
- mysql-shell-8.0.xx-windows-x86-64bit.zipファイルを解凍します。
- mysql-shell-8.0.xx-windows-x86-64bit\binフォルダ下のmysqlsh.exeファイルを環境変数PATHに追加します。
ハマったのは以下のポイント
- プラグインを試したい場合、%AppData%
\
MySQL\mysqlsh\pluginsフォルダを作ってそこに入れる- 資料のほうが%AppData% とMySQLの間の\が抜けててそれに最初気づけなかった
- あ、俺のPC、今Git入れてないわ…。(ZIP方式に切り替え)
2. 確認
3. 起動について(講義にはない。補足)
- 起動スクリプトというものを用意することでJavaScriptとPythonモードで起動した場合は実行環境をカスタマイズできる(9.1 Working With Startup Scripts)
- 起動スクリプトは以下のどこかに、Pythonなら
mysqlshrc.py
、JavaScriptならmysqlshrc.js
という名前で置く(以下Windowsでの話にしているが、Unix/Linuxも同様)- 標準のグローバル構成パス:Windowsの場合: %PROGRAMDATA%\MySQL\mysqlsh\mysqlshrc.[js|py]
- MYSQLSH_HOMEを作った場合:Windowsの場合: %MYSQLSH_HOME%\share\mysqlsh\mysqlshrc.[js|py]
- mysqlshバイナリを含むフォルダー内:Windowsの場合: (mysqlsh binary path)\mysqlshrc.[js|py]
- MYSQLSH_USER_CONFIG_HOMEを作った場合:Windowsの場合: %MYSQLSH_USER_CONFIG_HOME%\mysqlshrc.[js|py]
- 標準ユーザー設定パス:Windowsの場合: %APPDATA%\MySQL\mysqlsh\mysqlshrc.[js|py]
- 但し、あとで読み込まれたほうが優先されるので置き場所は注意!
- 例えば、以下のようにして起動スクリプトのモジュール検索パスを追加できる
Python(mysqlshrc.py)
# Import the sys module import sys # Append the additional module paths sys.path.append('~/custom/python') sys.path.append('~/other/custom/modules')
JavaScript(mysqlshrc.js)
// Append the additional module paths sys.path = [...sys.path, '~/custom/js']; sys.path = [...sys.path, '~/other/custom/modules'];
9.2.2 Module Search Path Variable in Startup Scripts参照
次の段階
下準備はできたので、ここから以下を少しずつ進めてみたい。
- 公式ドキュメントを一通り読んで触ってみる
- 講義でやってたpluginを試す(起動スクリプトが置かれているフォルダの下にpluginsというフォルダを作ってそこに置く)
- 同様に、Replica Setも触ってみる
- 書籍を読む⇒Charles BellのIntroducing MySQL Shell
- (余裕があれば)pluginを作る