概要
mysql_config_editorとラッパースクリプトでパスワード入力なしでMySQLへ接続する方法です。
mysql_config_editorとは
mysql_config_editorとは、MySQLへの接続情報を難読化して保存することで、接続を簡略化できるツールです。
使い方
接続情報の保存
CLIから以下のようにコマンドを入力します。
$ mysql_config_editor set -G $NAME -h $MYSQL_HOST -u $USER -p
$ mysql_config_editor set -G orenoserver -h orenoserver.example.com -u ore
そうすると、~/.mylogin.cnf
に難読化された接続情報の保存されたファイルが作成されます。
ここで、-G
オプションは、後述のlogin-pathに当たる名前です。
そのサーバに対するエイリアスだと思って問題ありません。
-h
、-u
、-p
は、通常のmysqlコマンドと同様に、ホスト名、ユーザ、パスワードの対話的入力のオプションです。
login-pathが一意であれば、複数の接続情報を保存できます。
接続方法
mysqlコマンドで--login-path
をオプションで渡すだけです。
$ mysql --login-path=$NAME
$ mysql --login-path=orenoserver
簡単ですね。
ラッパースクリプトにする
こういうことを必要とする人は、たくさんのMySQLへ接続する必要があると思います。
オプションすら打ちたくなく、プロンプトに接続サーバを識別する文字を入れたくなりますので、
以下のようなラッパースクリプトを作成します。
#!/bin/bash
# MySQL --login-path wrapper script "myconn"
set -eu
export MYSQL_TEST_LOGIN_FILE="$HOME/.mylogin.cnf"
if [ $# != 1 ]; then
mysql_config_editor print --all
exit
fi
LOGIN_PATH=$1
export MYSQL_PS1="\\u@$LOGIN_PATH [\\d]>\\_"
mysql --login-path="$LOGIN_PATH" --prompt="$MYSQL_PS1"
$ myconn
[orenoserver]
user = ore
password = *****
host = orenoserver.example.com
$ myconn orenoserver
これで、引数をログインパスを入力することでログインできるようになります。
また、引数なしで保存された接続情報の一覧が表示できるようになります。
補完する
ここまで来るとコマンドライン補完がしたくなります。
zshのサンプルです。
#compdef myconn
function _myconn() {
_arguments -C \
'1:: :->1' \
&& ret=0
case "$state" in
(1)
compadd `myconn | sed -n -e "s/\[\(.*\)\]/\1/p"`
;;
esac
}
これで保存された接続情報が補完に現れるようになります。