Резервное копирование данных на удаленный сервер
Что самое ценное в нашем мире – информация! Ее потеря очень не приятна, а за частую и невосполнима. Согласитесь, потерять проект на который было потрачено много времени и сил из-за банального сбоя электропитания или битых секторов на стареньком винте очень обидно и не приятно.
Именно для этого были придуманы механизмы резервного копирования данных. В linux основной утилитой для этого является rsync.
Для более удобного использования rsync был написан следующий скрипт. Он упрощает и помогает полностью автоматизировать процесс резервного копирования. Также скрипт позволяет делать копии не только каталогов и отдельных файлов но и баз данных MySQL.
#! /usr/bin/php
< ?php
/**
Скрипт резервного копирования данных
@author TUX
@site http://webiteam.ru/
*/
///////////////
/* НАСТРОЙКИ */
///////////////
// Папки для бекапа
$src[] = '/media/data/svnroot';
$src[] = '/var/www';
$src[] = '/etc/samba/smb.conf';
$src[] = '/home/user/.mozilla-thunderbird';
// Базы данных для бекапа
$database[] = 'mysql';
$database[] = 'site_db';
// Исключить из бекапа
$exclude[] = '.svn';
$exclude[] = '*.back';
$exclude[] = '*~';
// Сервер бекапов
$server = 'backupserver.ru';
// Имя пользователя
$user = 'username';
// Путь до файла с ssh ключем (если отличен от ~/.ssh/id_rsa)
$rsakey = '/home/user/.ssh/id_rsa_backup';
// Папка на сервере
$dist = '~/backup';
// Пользователь БД
$mysqlUser = 'root';
// Пароль
$mysqlPass = '';
// Кодировка дампов
$mysqlCharset = 'cp1251';
// Папка для временных файлов
$tmpDir = '/tmp';
// Путь до rsync
$rsync = 'rsync';
// Путь до mysqldump
$mysqldump = 'mysqldump';
//////////////////////
/* НЕ РЕДАКТИРОВАТЬ */
//////////////////////
print date("Y-m-d H:i:s")."\n";
if(!empty($database))
{
foreach($database as $base)
{
$dumpfile = $tmpDir.'/'.$base.'.sql.gz';
`{$mysqldump} --user={$mysqlUser} --password={$mysqlPass} --default-character-set={$mysqlCharset} --complete-insert {$base} | gzip > {$dumpfile}`;
$src[] = $dumpfile;
}
}
if(!empty($src))
{
if(!empty($exclude))
{
$excludeTmp = $tmpDir.'/rsync_exclude';
file_put_contents($excludeTmp, implode("\n",$exclude));
}
$exclude = empty($excludeTmp)?'':'--exclude-from='.$excludeTmp;
$source = implode(' ', $src);
$rsakey = empty($rsakey)?'':'-e "ssh -i '.$rsakey.'"';
print `{$rsync} -ruv --delete {$exclude} {$rsakey} {$source} {$user}@{$server}:{$dist}`;
}
print "\n\n";
?>
Думаю комментариев в скрипте вполне предостаточно и в особых уточнениях не нуждается.
Единственное напомню как делать ssh ключи.
Далее нам лишь остается создать crontab с примерно следующим:
1 21 * * * /path/to/script.php
Не забудьте дать права на исполнение скрипту.
Ну, если еще будет что-нибудь будет не понятно, спрашивайте с удовольствием отвечу.
В названии статьи опечатка. РезеРвное
@Sarry
Спасибо