背景・課題
mysqldump(mysqlでも同じ)で、コマンドに直接パスワードを指定すると以下の警告が出力されます。
手動で実行する分には許容範囲ですが、問題はcronで実行している時です。
エラー発生時に管理者にメール送信するようにしていると実行するたびにエラーメールが送信されてしまいます。
Warning: Using a password on the command line interface can be insecure
この警告の解消方法としてMYSQL_PWD
や--defaults-extra-file
を使った方法がありますが、--defaults-extra-file
を使ったところ以下のエラーが出力されて失敗します。
ユーザ名は指定したものが認識されているので意図したファイル・設定が読み込まれていることは間違いありません。
mysqldump: Got error: 1045: Access denied for user 'backup_user'@'localhost' (using password: YES) when trying to connect done exporting
- MySQL5.7でmysqldump時にwarning - まったりぺちばーのメモ帳
- mysql - Problem with mysqldump: "--defaults-extra-file" option is not working as expected - Stack Overflow
原因
パスワードに利用している特殊文字が認識されていなかった
[mysqldump]
user=backup_user
password=xxxxxx#xxx ← #以降が認識されない。
host=localhost
TIPS:パスワードが認識されているかの確認方法
設定ファイル内のpassword
をpasswd
とか不正な変数にして実行します。すると実行エラーとなり以下のようなエラーメッセージが表示されます。今回は#
以降が出力されなかったので、パスワードが認識されていないことに気がつきました。
[ERROR] unknown variable 'passwd=xxxxxxx'
対策
引用符で囲む
前)password=xxxxxx#xxx
後)password='xxxxxx#xxx'
あとがき
- ファイルが読み込まれていないのか?
- ファイル定義方法が間違えているのか?
- defaults-extra-file利用時特有の制約があるのか?
- パスワードをエスケープしたらどうか?
とか。結局、解決まで1時間くらい要してしまいました。。。(T_T)