先日、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
を使用した方が間違いが少なく済みそうだ。