2013年5月22日水曜日

ロリポップでphpMyBackupProで自動バックアップ #fb

とある案件で、ロリポップのロリポプランを使ってPHP+MySQLなシステムを動かしています。
クライアントシステムからデータを受信してDBにためてるんですが、となるとバックアップが
必要となってきます。
以前から目をつけていたphpMyBackupProを導入して、cronでシェルでbackup.phpを動かして
自動バックアップしていたのですが、、ある日を境にOut of memoryとかで途中で止まって
しまうようになってしまいました。

WebからphpMyBackupProにログインして手動でバックアップすると問題なくバックアップ出来ます。
PHP初心者なところもあり、わからないところもかなりあるのですが、、どうもcron時に
つかえるメモリが少なめなのかなという感じですが、じゃあどうしたら良いのか。。
一番安いプランなのでそんなもんなのかも・・・ということで別の方法を探りました。

もともとphpMyBackupProにはSchedule Backupという項目があって、スケジュール用のPHP
スクリプトを作成して出力してくれます。
なぜこれを使っていなかったかというと、、ちょっとやってみてバックアップできなかったから。。

このスクリプトはWebのPHPページにインクルードして使うもので、あるページを開くと
指定したタイミングでバックアップをとってくれるようです。
詳しくはわかってないですが。。
とりあえず、毎回バックアップするようにして作成し、ブラウザから開いてみるものの、、
バックアップはされず。
作成されたPHPをみてみると、下の方で以下のようなコードになっていました。

@chdir("/home/users/2/lolipop.jp-xxxxxx/web/");
@include("backup.php");
@chdir("/home/users/2/lolipop.jp-xxxxxx/web/phpMyBackupPro/");


ん?
bakup.phpはphpMyBackupProディレクトリにあるのですが、1行目でなぜかその一つ上の
ディレクトリにchdirされてます。
これを以下に修正すると、バックアップ出来ました!

@chdir("/home/users/2/lolipop.jp-xxxxxx/web/phpMyBackupPro/");
@include("backup.php");
@chdir("/home/users/2/lolipop.jp-xxxxxx/web/phpMyBackupPro/");


あとはこれをcronで呼び出す用のスクリプトを作成します。

<?php
file_get_contents('http://your.domain/phpMyBackupPro/mycron.php');
?>


file_get_contentsで、ブラウザで開いた体になるのでメモリ問題もなく
バックアップが取れるっぽいです。

ひょっとしたら他になにか設定でどうにかなるのかもですが、、
今のスキルではこの程度ですね。
とりあえず動くのでよし。

余談ですが最近、もっとLinuxとか、PerlやPHPもやっとけばよかったなと
思います。もともとUNIX系をやってたのに、業務系はWindowsが多いので
どうしてもそっち方面のVB.NETだのばかりやってしまってました。

でもまあ、これからでも十分できると思うのでやっていくつもりです。


0 件のコメント:

コメントを投稿