MySQLの5.6くらいからコマンドラインでパスワードを直書きするとWarningが出るようになった。
こんな感じ
$ mysqldump -u root -ppassword -A -x > /tmp/dump.db
Warning: Using a password on the command line interface can be insecure.
-pの後に直接パスワード指定したら危険だというWarningかな。
psで見ても
mysqldump -u root -px xxxx -A -x
みたくxxxになってたのでそれなりに安全だと思ってて気にしなかったのだけど、バックアップスクリプトとしてcronで回してたので定期的にメールがきて困ったから対策。
結論として以下のようにするとOKでした。
$ mysqldump --defaults-extra-file=<(printf '[mysqldump]\npassword=%s\n' password) -u root --single-transaction --master-data=2 -A > dump.db
というわけで以下のようなスクリプトをcronで回すようにしました。(/bin/shだと多分エラーになるのでbashで。)
#!/bin/bash
USER=root
PASS=password
mysqldump --defaults-extra-file=<(printf '[mysqldump]\npassword=%s\n' $PASS) -u $USER --single-transaction --master-data=2 -A > /path/to/my_dumpall_`date +%Y%m%d`.db
mysqladmin --defaults-extra-file=<(printf '[mysqladmin]\npassword=%s\n' $PASS) -u $USER flush-hosts
OLDDATE=`date "-d2 days ago" +%Y%m%d`
rmfile=/path/to/my_dumpall_$OLDDATE.db
if [ -e $rmfile ]; then
sleep 5m
rm -f $rmfile
fi
##はまりポイント
defaults-extra-file のオプションの位置は一番初めでないとエラーになります。
例えば、こんな感じで ユーザーオプションの後ろにもってきちゃうと・・・
mysqldump -u $USER --defaults-extra-file=<(printf '[mysqldump]\npassword=%s\n' $PASS) --single-transaction --master-data=2 -A > /path/to/my_dumpall_`date +%Y%m%d`.db
こんなエラーになります。
mysqldump: unknown variable 'defaults-extra-file=/dev/fd/xx'
特にmysqlのエイリアス設定で
alias mysql='mysql --skip-secure-auth'
alias mysqldump='mysql --skip-secure-auth'
とか設定されてた場合は同様の原因で動かなくて原因も気づきにくいので注意です。
##参考
MySQLのコマンドラインで-pオプションを使わずにパスワードを指定する方法 - インフラエンジニアway - Powered by HEARTBEATS
[Problem with mysqldump: “--defaults-extra-file” option is not working as expected - Stack Overflow]
(http://stackoverflow.com/questions/3836214/problem-with-mysqldump-defaults-extra-file-option-is-not-working-as-expecte)