Бекап на лету

Скрипт создает архив заданной директории, и тут же пишет его на FTP, при этом не создавая файла архива локально.
#! /usr/env/php
<?php
define('DIR', '/home/www');
define('FTP_HOST','');
define('FTP_PORT',21);
define('FTP_USER','');
define('FTP_PASSWD','');
define('FTP_USE_PASSIV_MODE',true);


$ftp_stream = ftp_connect(FTP_HOST,FTP_PORT);
ftp_login($ftp_stream,FTP_USER, FTP_PASSWD);
ftp_pasv($ftp_stream,FTP_USE_PASSIV_MODE);

$h = popen('tar cjf - '.DIR, 'rb');

ftp_fput($ftp_stream, 'test.tar.bz2', $h, FTP_BINARY);
ftp_close($ftp_stream);
pclose($h);
?>

Автоматический бекап

Знаю что для этого есть уже достаточно инструментов. Но мне захотелось написать свой. Скрипт собирает папку home в нее докидывает дамп отдельно каждой базы и отсылает на ftp, при этом предварительно зашифровав файл
<?php
define('USER_DB','');
define('PASS_DB', '');
define('HOST_DB', '');

define('FTP_HOST', '');
define('FTP_USER', '');
define('FTP_PASS', '');

define('ENCODE_PASS', '');//пароль для кодирования файла
define('U_NAME', date('Y_m_d')); //используется для именования папок и файлов


exec('mkdir /backup/'.U_NAME);

exec('cp -r /home /backup/'.U_NAME);

exec('mkdir /backup/'.U_NAME.'/db');
$link = mysql_connect(HOST_DB, USER_DB, PASS_DB);
$db_list = mysql_list_dbs($link);

while ($row = mysql_fetch_object($db_list)) {
     exec('mysqldump -u'.USER_DB.' -p'.PASS_DB.' '.$row->Database.' > /backup/'.U_NAME.'/db/'.$row->Database.'.sql');
}

//exec('tar czf /backup/'.date('Y_m_d').'.tar.gz'.' /backup/'.date('Y_m_d'));
exec('tar czf - /backup/'.U_NAME.' | openssl enc -e -aes-256-cbc -k '.ENCODE_PASS.' > /backup/'.U_NAME.'.tar.gz.encoded');


exec('rm -R /backup/'.U_NAME);

$r = ftp_connect(FTP_HOST);
ftp_login($r, FTP_USER, FTP_PASS);
ftp_put($r, '/backup/'. U_NAME.'.tar.gz.encoded','/backup/'.U_NAME.'.tar.gz.encoded', FTP_BINARY);
ftp_close($r);

exec('rm /backup/'.U_NAME.'.tar.gz.encoded');


//openssl enc -d -aes-256-cbc -in ./archive.tar.gz.encoded | tar -xz    - обратная расшифровка
  • 0
  • 19 октября 2009, 13:02
  • admin
  • 1