先日、mysqldumpを実行するシェルファイルが以下のエラーで動かないことがあった。

Access denied for user ‘root’@’localhost’ (using password: YES)

こちらがシェルファイルの中身で、–defaults-extra-fileオプションでMySQLの接続情報を書いた.mysqlというファイルにアクセスし、mysqldumpを実行しようとしている。

#!/bin/sh 
dirpath='/var/www/bk/db' 
filename=`date +%Y%m%d` 
mysqldump --defaults-extra-file=/var/www/db_dump/.mysql --single-transaction wp_db | gzip > $dirpath/wp_db_$filename.sql.gz 

ちなみに、シェルファイルを利用したmysqldumpの実行についてはこちらの記事で詳しく説明している。

さて、前述のエラーについて、エラーメッセージを見るとどうやら接続情報に誤りがあるとのことだが、.mysqlに書かれた設定内容はいくら確認しても間違っていなかった。

散々調べた挙句、解決した方法がこちら。

mysqldump --defaults-file=/var/www/db_dump/.mysql --single-transaction wp_db | gzip > $dirpath/wp_db_$filename.sql.gz 

--defaults-extra-file--defaults-fileに変更するだけでエラーを解消することができた。

調べたところ、--defaults-extra-fileはデフォルトで読み込むオプションファイルに加え、指定したファイルを読み込むのに対し、--defaults-fileは指定したファイルだけを読み込むオプションのようだ。

詳細は確認していないが、どうやら--defaults-extra-fileでエラーが発生していたのは、別のオプションファイルでも接続情報を読み込んでおり、2重読み込みとなったため不具合が生じていたようだ。

今回のように外部ファイルで接続情報を読み込む場合は--defaults-fileを使用した方が間違いが少なく済みそうだ。