- 締切済み
mysqlの自動バックアップ
crontabを実行してmysqlのバックアップを取ろうとしています。 まず、以下のunixコマンドでバックアップできることを確認しました。 mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql これをcrontabで実行するためにphpファイルにして以下のように記述しました。 <?php $output = shell_exec('mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql'); echo "<pre>$output</pre>"; ?> このファイルを実行すると以下のメッセージが返されます /***/sql_backup.php: line 1: ?php: そのようなファイルやディレクトリはありません /***/sql_backup.php: line 2: syntax error near unexpected token `(' /***/sql_backup.php: line 2: `$output = shell_exec('mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql');' phpでコマンドを実行するにはshell_execを使うとあり、試してみたのですが、こういう方法では使えないのでしょうか? 最終的にはcrontabを使ってmysqlのバックアップが取れれば良いので、他に方法があるようでしたら教えて頂ければ助かります。 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- honoka-cha
- ベストアンサー率54% (40/73)
まずphpが置いてあるパスを確認しましょう which php を打ってみてください。 そして例えば、 /usr/bin/php と表示されたらこれを覚えておいて自作のphpファイルと併せて次のように打ってみましょう /usr/bin/php /home/user/appli/bin/backup.php これで動くのではないでしょうか
- honoka-cha
- ベストアンサー率54% (40/73)
> それ以前に、telnetからパスをたたいて実行しようとしていて 具体的にどういうふうにたたいていますか その1行をよろしければ省略せずに示して頂けますか
- honoka-cha
- ベストアンサー率54% (40/73)
phpスクリプトのつもりで作ったものが残念ながらbash等のシェルスクリプトと して解釈されているようです。 仮にphpのパスが/usr/bin/phpでphpファイル名がbkup.phpだとするなら /usr/bin/php bkup.php とすれば動くんじゃないでしょうか
補足
/var/spool/cron/userでは同様の設定をしているのですが.... それ以前に、telnetからパスをたたいて実行しようとしていて、上記のような症状が出ています。
- shimix
- ベストアンサー率54% (865/1590)
そもそもphpとして実行されていませんね。お使いのサーバでのcronの書き方は確認されていますでしょうか? つまり「拡張子が.phpであればcronでphpスクリプトとして実行される」ことは確認されていますか? シェルスクリプトにして、 #!/bin/sh /usr/local/bin/php (phpスクリプトのサーバパス) などと書かないといけない環境などもありますので。 >最終的にはcrontabを使ってmysqlのバックアップが取れれば良いので、 phpで書く必要がなければ、単にshellで #!/bin/sh mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql でもいいのでは? なお「#!/bin/sh」が必要なのかどうか(またshell名が妥当か)はサーバの仕様を確認してください。
補足
ありがとうございます。 #!/bin/sh mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql をbackup.shとして保存し実行できました。 が、/var/spool/cron/user 側の設定がわかりません。 0 1 * * * のように起動時刻を設定した後、backup.shへのパスを書くだけでは実行できないようです。
- saintandre
- ベストアンサー率31% (194/607)
phpを経由させずにcrontabに直接mysqldumpを記述するのでは駄目なのでしょうか?
補足
今、試している所ですが、/var/spool/cron/user の書き方がわかりません。
補足
ファイルの置いてあるパスを指定しています。 /home/user/appli/bin/backup.sh /home/user/appli/bin/backup.php といった形です。