Rsync — конфигурируем бэкапы просто

Автор: Aport Пятница, Январь 30th, 2015 Нет комментариев

Рубрика: Разное

Написал PHP-инструмент для легкого конфигурирования Rsync-бэкапов и решил рассказать Вам о нем.

Действия на Slave-сервере

Slave-сервер — то куда будет отправляться бэкап (место хранения бэкапа). Конечно мы должны настроить то место, где у нас будут храниться бэкапы, давайте сделаем это.

1. Подключитесь по SSH к Slave-серверу:

ssh root@slave.ru

2. Установите rsync

apt-get install rsync

2. Создайте группу rsync, пользователя rsync и его домашнюю директорию:

groupadd rsync
useradd -g rsync -s /bin/bash -p Pa$$word -d /home/rsync -m rsync
passwd rsync

3. Авторизуйтесь под пользователем rsync и войдите в его домашнюю директорию:

cd /home/rsync

4. Создайте следующие директории и выставите им права доступа:

chmod 700 list
chmod 700 files/backup
chmod 700 files/changes

5. Не обязательно, но желательно добавить в файл .ssh/known_hosts публичный ключ пользователя Master-сервера (того пользователя, которым будете подключиться к Slave-серверу)

Действия на Master-сервере

Master-сервер — место, где хранится оригинал (который нужно бэкапить)

1. Установите rsync

apt-get install rsync

2. В директории с PHP-инструментом создайте файл run.php с приблизительно таким содержимым

<?php
error_reporting(E_ERROR | E_PARSE | E_COMPILE_ERROR);

include(‘my.php’);

// укажим директорию (на Slave-сервере), в которой будем хранить актуальный бэкап
my::rsync()->setBackupDir(‘/home/rsync/files/backup/’);

// укажим директорию (на Slave-сервере), в которой будут храниться изменения в бэкапе
my::rsync()->setChangesDir(‘/home/rsync/files/changes/’);

// добавим директорию которую нужно бэкапить и внутреннюю директорию, которую не нужно бэкапить
my::rsync()->path(‘/my/dir/’)->exclude(‘data/www/site.ru/cache/*’);

// добавим директорию которую нужно бэкапить, исключая внутреннюю кэш директорию и файлы имена которых заканчиваются на log
my::rsync()->path(‘/var/www/yapro/’)->exclude(‘*/cache/*’)->exclude(‘*log’);

// добавим для всех бэкапов внутренние директории(пути), которые не нужно бэкапить
my::rsync()->excludeForAll(‘data/logs/*’);
my::rsync()->excludeForAll(‘data/email/*’);
my::rsync()->excludeForAll(‘*.git’);

// так же нужно указать адрес подключения по ssh к Slave-серверу и если необходимо, то укажите порт подключения:
my::rsync()->setSsh(‘rsync@slave.ru’)->setSshPort(23)

// сохраним наши настройки
my::rsync()->save();

3. Выполните этот файл

php run.php

в результате в файл run пропишутся команды выполняющие бэкап.

4. Для проверки запустим в консоле шел-скрипт:

/bin/sh run

если возникли проблемы, то смотрите в файл log (он лежит рядом с файлом run).

5. Если ошибок не возникло, то советую добавить в крон эту команду, для выполнения раз в день.

p.s. после того, как все заработало, разумно удалять старые изменения в бэкап директории changes, поэтому на Slave-сервере кроном каждый час выполняйте PHP-скрипт:

/usr/local/bin/php /home/rsync/delete_old_changes.php

а сам скрипт выглядит так:

<?php
error_reporting(E_ERROR | E_PARSE | E_COMPILE_ERROR);

ob_start();
@passthru(‘rm -fr /root/Rsync/files/changes/’.date(‘Y/n/j/G’, (time()-259200) ));// 3 дня бэкапа
$command_str = ob_get_contents();
ob_end_clean();

ob_start();
@passthru(‘rm -fr /root/Rsync/files/changes/’.date(‘Y/n/j’, (time()-345600) ));// 4 дня бэкапа
$command_str .= ob_get_contents();
ob_end_clean();

echo $command_str;

убедитесь что файлу /home/rsync/delete_old_changes.php выставлены права 0700

 

Источник: yapro.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты