こんにちは。CTOの馬場です。
今回もインフラエンジニア向けにちょっとした情報を紹介します。
今回はバッチ処理でMySQLに接続するときに、パスワードをうまく受け渡す方法を紹介します。
まずは`-p`オプションでコマンドラインに書く方法があります。が、プロセスツリーに表示されてしまうため安全とは言えません。そこで2つの方法を紹介します。
1. `.my.cnf`に設定する
2. `.my.cnf`なしでなんとかする
# `.my.cnf`に設定する
ユーザのホームディレクトリに`.my.cnf`というファイルを置いて下記の内容を設定することで、パスワードを指定することができます。このパスワードは標準のMySQLクライアント全てで使用されます。
※ファイルの権限は600に設定しておきましょう。
[client] password="my_password"
この方法だと、ユーザごとにパスワードが分かれている場合にはうまく対応できません。その場合の対処法は続きをどうぞ
# `.my.cnf`なしでなんとかする
`DBUSER`変数にユーザ名、`DBPASSWORD`変数にパスワード、`DBNAME`変数に接続先DB名を記述する前提です。
以下の方法で、ファイルを設置しなくても1行でなんとかすることができます。
mysql --defaults-file=<( printf '[client]\npassword=%s\n' ${DBPASSWORD} ) \
-u ${DBUSER} ${DBNAME}
このとき、プロセスツリーは以下のようになります。
mysql --defaults-file=/dev/fd/63 -u ユーザ名 DB名
ぜひお試しください。
参考: [ MySQL :: MySQL 4.1 リファレンスマニュアル :: 4.1.2 my.cnf オプション設定ファイル ](http://dev.mysql.com/doc/refman/4.1/ja/option-files.html)