How to use .mylogin.cnf

.mylogin.cnfファイルを使うことでパスワードの入力をすることなく、MySQLへ認証できます。

.mylogin.cnfの注意事項

以下の条件を満たしていないと参照してくれませんでした。

  • mysql_config_editorコマンドを使って暗号化されたファイルとして存在する必要がある

.mylogin.cnfの作成方法

以下のようにして作成できます。

mysql_config_editor set --host=localhost --login-path=local --user=localuser --password

passwordの入力が求められ、その後~/.mylogin.cnfが作成されます。passwordの文字列を引数で指定することはできない。

printすることでデコードすることが出来ます。ただし、パスワードはマスクされています。

$ mysql_config_editor print --all
[local]
user = localuser
password = *****
host = localhost

.mylogin.cnfの使い方

MySQLクライアント使用時に自動で参照されますが、--login-pathオプションを指定する必要があります。

  • 指定しないとこんな感じで失敗する
$ mysqladmin -u localuser ping
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'localuser'@'localhost' (using password: NO)'
  • --login-pathを指定すること
$ mysqladmin --login-path=local -u localuser ping
mysqld is alive

例えばlogrotateでは/etc/logrotate.d/mysqlにデフォルトで以下のような処理が書かれていますが、

postrotate
    # just if mysqld is really running
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin ping &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
endscript

/usr/bin/mysqladmin ping/usr/bin/mysqladmin flush-logs--login-pathオプションが無いので失敗すると思います。注意!

平文でやりたい場合

.my.cnfを使えば可能です。以下のような内容で置いておけば良い。

[local]
user = localuser
password = hogehoge
host = localhost

感想

.mylogin.cnfは暗号化されていないと参照されないのは知らなかった…。

参考リンク