8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLへの接続を楽にする

Last updated at Posted at 2017-04-07

概要

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
}

これで保存された接続情報が補完に現れるようになります。

8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?