データバックアップ用の基本PHPスクリプト

Bashでのバックアップに関する最近のトピックへの回答。 トピックは間違いなく便利ですが、より柔軟な方法を示したいと思います...

上記のトピックにおける上記の方法の主な欠点は、役に立たないことです。 正直なところ、誰がファイルとデータベースを同時にバックアップする必要がありますか? つまり 毎日ファイルとデータベースをバックアップするのはバカですが、月に1度行うのはバカです。 したがって、例を2つの部分に分割しました。 個別に、データベースを毎日バックアップし、個別に、週に1回ファイルをバックアップします。

したがって、サーバー上にphpが必要です。 私たちの時代のそれはもはや贅沢ではなく、バナリティです。

それで、私にとっては、ローカルバックアップは/ usr / backup /に保存されることにしました

phpスクリプト/ usr / backup / backup_dbを作成します。



#!/usr/local/bin/php

<?

$ex=array('information_schema', 'mysql');

$db_pass='password';

$db_user='root';



system('mkdir -p /usr/backup/mysql/'.date('dmY').'/');

$db=mysql_connect("localhost", $db_user, $db_pass);

$sql=mysql_query("SHOW DATABASES");

while($a=mysql_fetch_assoc($sql)){

$base=$a['Database'];

if(!in_array($base, $ex)){

exec('/usr/local/bin/mysqldump -u'.$db_user.' -p'.$db_pass.' --opt '.$base.' | /usr/bin/gzip > /usr/backup/mysql/'.date('dmY').'/'.$base.'.gz');

}

}







ご覧のとおり、すべてがシンプルで原始的です。 $exは例外のある配列であることに注意してください。 ここに毎日バックアップしたくないベースを追加します。 ユーザー$ db_userが見る残りのデータベースは、それぞれ個別にバックアップされ、/ usr / backup / mysql / date / base.gzディレクトリに配置されます。

これは、プロジェクトごとに個別のバックアップファイルを作成するよりもはるかに便利です。 たとえば、2つのサーバーがあり、各10以上のプロジェクトにあります。 それほど多くはありませんが、数は常に更新されます。 誰かが去り、誰かが来て、新しいサーバーなどが現れた。 1つのファイルをコピーするだけで十分で、すべてのプロジェクトのバックアップが自動的に収集されます。 これは便利です。

したがって、クラウンに行を追加します(FreeBSDの場合。Linuxの場合、私が覚えている限り、もう一方。linuxoidsを修正してください)。

0 5 * * * root /usr/backup/backup_db





つまり、毎日05:00にベースの新しいバックアップを収集し、それをgzipemします。



さて、コードと写真を忘れないでください... / usr / backup / backup_www ...

そのような人、私は/ usr / local / www / ...にすべてのプロジェクトを持っています



#!/usr/local/bin/php

<?

$ex=array('test.ru');

$dir='/usr/local/www/';



system('mkdir -p /usr/backup/www/'.date('dmY').'/');

$d=opendir($dir);

while(($file=readdir($d))!==false){

if($file!='.' && $file!='..' && is_dir($dir.'/'.$file) && !in_array($file, $ex)){

exec('tar cpzvf /usr/backup/www/'.date('dmY').'/'.$file.'.tar.gz --exclude=*.log* --exclude=*.svn* '.$dir.$file);

}

}







ご覧のとおり、バックアップスクリプトはログファイルとsvnファイルを除くすべてです。 svnに関しては、私は間違っているかもしれませんが、これまでのところ問題はありませんでした。 また、$ exc配列は例外です。

cronでのこのスクリプトに対して、少し異なるルールを記述します。

0 5 * * 6 root /usr/backup/backup_www





したがって、週末の午前5時にスクリプトと統計をバックアップします。

これらのスクリプトは、サーバーだけでなく、クライアントサーバーでも使用します。 確かに、クライアントでは、アーカイブを3番目のサーバーにコピーして恐怖を増やすこともできます。 一部のサーバーでは、必要なデータベースの個別のテーブルが1時間ごとにバックアップされます。 PHPは、bashにはない柔軟性を提供します。



クラウンにデータを追加した後のpsは、それを再起動することを忘れないでください。 また、backup_dbおよびbackup_wwwにchmod + xを設定することを忘れないでください

pps追加や批判は大歓迎です。



All Articles