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
は暗号化されていないと参照されないのは知らなかった…。