下記のPHPソースで、cronを使用して、定期的にPHPソースとMySQLのダンプファイルの二点をバックアップを取っておりますが

PHPソースはバックアップが取れますが、SQLが取れません。
また、SSHで実行した場合はSQLのバックアップは取れます。(Cronでのみ取れません。)
ご教授いただけますでしょうか?

system('mysqldump -u ' . db_user . ' -p' . db_pass . ' ' . db_name . '> ' . save_pass . 'db/' . db_name . '.sql');

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/07/20 00:10:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:JULY No.1

回答回数966ベストアンサー獲得回数247

ポイント50pt

真っ先に考えられるのは、環境変数の問題です。使っている OS や、ユーザの crontab に設定したのか、/etc/cron.daily のようなところにスクリプトを置いたのか、といったことで違いますが、例えば、手元の CentOS では /etc/crontab ファイルによって起動されるもの(/etc/cron.daily といったディレクトリの下にあるファイルの実行を含む)の場合、「PATH=/sbin:/bin:/usr/sbin:/usr/bin」となっています。

ディストリビューションに付いてきている mysql であれば問題ないと思うのですが、ソースからビルドして /usr/local/bin の下に mysqldump があるような場合、PATH が通っていなかったり、LD_LIBRARY_PATH が不足していると、実行に失敗する事になります。

ちなみに、手元の CentOS 6.2 でユーザの cron 設定(crontab -e とかで作る設定)の時の環境変数は下記の通りでした。

SHELL=/bin/sh
USER=july
PATH=/usr/bin:/bin
PWD=/home/july
SHLVL=1
HOME=/home/july
LOGNAME=july
_=/usr/bin/env

この結果は、下記のような crontab の設定をすると得られます。

 * * * * * env >/tmp/env

設定を放置すると、毎分 /tmp/env というファイルを書き込みに行くので、/tmp/env の中身を確認したら、上記設定を外すことをお忘れなく。

ということで、一度、環境変数を確認する事をおすすめします。

id:zebevogue No.2

回答回数65ベストアンサー獲得回数7

ポイント50pt

ダンプしているディレクトリのパーミッションを確認してみてはいかがでしょうか。
具体的にはcronを実行しているユーザが書込みできるかどうかです。

コメントはまだありません

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

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

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

回答リクエストを送信したユーザーはいません