[mysqldump]defaults-extra-file を使用すると 1045: Access denied


背景・課題

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


原因

パスワードに利用している特殊文字が認識されていなかった

[mysqldump]

user=backup_user
password=xxxxxx#xxx ← #以降が認識されない。
host=localhost


TIPS:パスワードが認識されているかの確認方法

設定ファイル内のpasswordpasswdとか不正な変数にして実行します。すると実行エラーとなり以下のようなエラーメッセージが表示されます。今回は#以降が出力されなかったので、パスワードが認識されていないことに気がつきました。

[ERROR] unknown variable 'passwd=xxxxxxx'


対策

引用符で囲む

前)password=xxxxxx#xxx

後)password='xxxxxx#xxx'


あとがき


  • ファイルが読み込まれていないのか?

  • ファイル定義方法が間違えているのか?

  • defaults-extra-file利用時特有の制約があるのか?

  • パスワードをエスケープしたらどうか?

とか。結局、解決まで1時間くらい要してしまいました。。。(T_T)