PHPソースはバックアップが取れますが、SQLが取れません。
また、SSHで実行した場合はSQLのバックアップは取れます。(Cronでのみ取れません。)
ご教授いただけますでしょうか?
system('mysqldump -u ' . db_user . ' -p' . db_pass . ' ' . db_name . '> ' . save_pass . 'db/' . db_name . '.sql');
真っ先に考えられるのは、環境変数の問題です。使っている 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 の中身を確認したら、上記設定を外すことをお忘れなく。
ということで、一度、環境変数を確認する事をおすすめします。
コメント(0件)