• 締切済み

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のバックアップが取れれば良いので、他に方法があるようでしたら教えて頂ければ助かります。 宜しくお願いします。

みんなの回答

回答No.5

まずphpが置いてあるパスを確認しましょう which php を打ってみてください。 そして例えば、 /usr/bin/php と表示されたらこれを覚えておいて自作のphpファイルと併せて次のように打ってみましょう /usr/bin/php /home/user/appli/bin/backup.php これで動くのではないでしょうか

回答No.4

> それ以前に、telnetからパスをたたいて実行しようとしていて 具体的にどういうふうにたたいていますか その1行をよろしければ省略せずに示して頂けますか

bacchus047
質問者

補足

ファイルの置いてあるパスを指定しています。 /home/user/appli/bin/backup.sh /home/user/appli/bin/backup.php といった形です。

回答No.3

phpスクリプトのつもりで作ったものが残念ながらbash等のシェルスクリプトと して解釈されているようです。 仮にphpのパスが/usr/bin/phpでphpファイル名がbkup.phpだとするなら /usr/bin/php bkup.php とすれば動くんじゃないでしょうか

bacchus047
質問者

補足

/var/spool/cron/userでは同様の設定をしているのですが.... それ以前に、telnetからパスをたたいて実行しようとしていて、上記のような症状が出ています。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

そもそも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名が妥当か)はサーバの仕様を確認してください。

bacchus047
質問者

補足

ありがとうございます。 #!/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へのパスを書くだけでは実行できないようです。

回答No.1

phpを経由させずにcrontabに直接mysqldumpを記述するのでは駄目なのでしょうか?

bacchus047
質問者

補足

今、試している所ですが、/var/spool/cron/user の書き方がわかりません。

関連するQ&A