シェルスクリプトでMySQLの mysqldumpバックアップ

を cronに登録しましたが、ダンプに失敗しています。
OS:FreeBSD 8.3

シェルスクリプトの場所
/usr/home/www/scripts/bk_mysql.sh
所有者:権限
-rwxr-xr-- 1 user1 wheel 398 Jun 10 19:45 bk_mysql.sh

内容
#!/bin/sh

BACK_DIR=/usr/home/www/www.example.com/backup
MYSQL_ROOT_PW=aaaaaaa

# mysqldump
cd $BACK_DIR
mysqldump -u root --password=$MYSQL_ROOT_PW --all-databases > mysql_`date +%y%m%d%H%M`.sql

cron は1分毎にテスト実行しています
*/1 * * * * root /usr/home/www/scripts/bk_mysql.sh
しかし、ダンプファイルが作られません。

なお、同スクリプト内で、以下のアーカイブのパターンではアーカイブ生成に成功していますので、パーミッションなどには問題ないのかな?
DATA_DIR=/var/db

cd $DATA_DIR
tar cvzf $BACK_DIR/mysql_`date +%y%m%d-%H%M` mysql
と思っています。

mysqldump 特有の問題なのでしょうか?
ご教示お願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/06/10 20:05:58
  • 終了:2013/06/14 07:47:30

ベストアンサー

id:haruo-31 No.2

haruo-31回答回数80ベストアンサー獲得回数102013/06/10 22:33:35

ポイント50pt

$ which mysqldump
と入力して、表示されるパス (/sbin/mysqldump) といったパスで、
mysqldumpコマンドを置換すると良いと思いますよ。

*/1 * * * * root /usr/home/www/scripts/bk_mysql.sh
/etc/crontab に直書きしてるんでしょうか。
とりあえずrootがコマンドラインとして認識されている可能性を考えて、
shに置換してみてはいかがでしょう。

余談ですがrootでコマンドを実行するのは、あまりよくありません。
上記例では、mysqldumpによってディスクが本当にfullになってダウンするとか、
そういうことも起り得ます。 一般ユーザなら、95%で止めてくれたりします。(そういう設定がされている前提ですが)

他2件のコメントを見る
id:a-kuma3

# 質問者さん向け

実行される親プロセスが違うことによるのですが、説明が長くなるので割愛します。

ログインシェルによりますけど、例えば bash だと、ログインプロンプトが出る前に、.bash_profile とか .bashrc が読み込まれて実行されます。
PATH などの環境変数の設定は、ここでやっているはず。
ログインプロンプトから実行されるシェルスクリプトは、ログインシェルの子プロセスとして起動されます。
スクリプトを動かすシェルは、親のログインシェル (例えば、bash) の環境変数を引き継ぎます。

cron の場合には、これが働かない (/usr/bin/cron の子プロセスとして実行されるだけ) ので、プロンプトで動いてたスクリプトが cron で動かないのは何故、みたいなことになります。

2013/06/12 13:31:16
id:gdwtseq

そうだったのかー!

すみません。何度もご回答いただき、理解できました。

ありがとうございました。

2013/06/14 07:47:08

その他の回答(1件)

id:dawakaki No.1

だわかき回答回数797ベストアンサー獲得回数1222013/06/10 21:10:11

ポイント50pt

mysqldumpにパスは通っていますか?
確認して下さい。

それから、mysqldumpは重たい処理なので、cronで1分おきというのは現実的ではありません。1時間おきにしてみて下さい。

id:gdwtseq

アドバイスありがとうございます。
rootユーザーで、
# which mysqldump
とやると、
/usr/local/bin/mysqldump
と返ってくるので、パスは通っているという理解でしたが、
違うのでしょうか?

2013/06/11 10:02:17
id:dawakaki

cronはrootユーザーで実行されるわけではないので、mysqldumpをフルパスで記述してください。

2013/06/11 20:06:37
id:haruo-31 No.2

haruo-31回答回数80ベストアンサー獲得回数102013/06/10 22:33:35ここでベストアンサー

ポイント50pt

$ which mysqldump
と入力して、表示されるパス (/sbin/mysqldump) といったパスで、
mysqldumpコマンドを置換すると良いと思いますよ。

*/1 * * * * root /usr/home/www/scripts/bk_mysql.sh
/etc/crontab に直書きしてるんでしょうか。
とりあえずrootがコマンドラインとして認識されている可能性を考えて、
shに置換してみてはいかがでしょう。

余談ですがrootでコマンドを実行するのは、あまりよくありません。
上記例では、mysqldumpによってディスクが本当にfullになってダウンするとか、
そういうことも起り得ます。 一般ユーザなら、95%で止めてくれたりします。(そういう設定がされている前提ですが)

他2件のコメントを見る
id:a-kuma3

# 質問者さん向け

実行される親プロセスが違うことによるのですが、説明が長くなるので割愛します。

ログインシェルによりますけど、例えば bash だと、ログインプロンプトが出る前に、.bash_profile とか .bashrc が読み込まれて実行されます。
PATH などの環境変数の設定は、ここでやっているはず。
ログインプロンプトから実行されるシェルスクリプトは、ログインシェルの子プロセスとして起動されます。
スクリプトを動かすシェルは、親のログインシェル (例えば、bash) の環境変数を引き継ぎます。

cron の場合には、これが働かない (/usr/bin/cron の子プロセスとして実行されるだけ) ので、プロンプトで動いてたスクリプトが cron で動かないのは何故、みたいなことになります。

2013/06/12 13:31:16
id:gdwtseq

そうだったのかー!

すみません。何度もご回答いただき、理解できました。

ありがとうございました。

2013/06/14 07:47:08

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません