Главная > Linux, PHP > Резервное копирование данных на удаленный сервер

Резервное копирование данных на удаленный сервер

Что самое ценное в нашем мире – информация! Ее потеря очень не приятна, а за частую и невосполнима. Согласитесь, потерять проект на который было потрачено много времени и сил из-за банального сбоя электропитания или битых секторов на стареньком винте очень обидно и не приятно.
Именно для этого были придуманы механизмы резервного копирования данных. В 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

Не забудьте дать права на исполнение скрипту.
Ну, если еще будет что-нибудь будет не понятно, спрашивайте с удовольствием отвечу.

Categories: Linux, PHP Tags: , , ,
  1. 10 Март 2010 в 21:02 | #1

    В названии статьи опечатка. РезеРвное :)

  2. 10 Март 2010 в 22:24 | #2

    @Sarry
    Спасибо ;)

  1. Пока что нет уведомлений.