Статьи

Резервное копирование с использованием Expect и Rsync

Только Rsync – это мощный инструмент для перемещения данных внутри и между локальными и удаленными серверами. В сочетании с Expect интерактивные сеансы можно автоматизировать в командной строке для очень полезных целей.

Я считаю, что самым мощным приложением является процесс горячего резервного копирования на удаленные серверы каждый вечер. Хотя резервное копирование на оптические диски выполняется для автономного архивирования и сохранения данных, я считаю, что наиболее полезными являются резервные копии, которые хранятся на защищенных удаленных серверах, управляемых через Expect и Rsync.

Expect – находится по адресу http://expect.nist.gov/ – просто включает автоматические ответы на запросы в командной строке, когда вмешательство пользователя не является необходимым или разумным. Таким образом, можно выполнять резервное копирование в течение ночи, позволяя удаленную аутентификацию и ввод пароля при появлении запроса (когда «ожидается» – отсюда и название). Дополнительную информацию можно найти, запустив в командной строке man wait.

Эти файлы добавляются с расширением .exp, и, как вы увидите в приведенных ниже сценариях, используйте шебанг вверху для вызова программы Expect. Я установил разрешения для этих сценариев как исполняемые только пользователем root.

Rsync – находится по адресу http://samba.anu.edu.au/rsync/ – это инструмент для синхронизации данных, копирования файлов и так далее. Дополнительную информацию можно найти, запустив man rsync в командной строке.

Rsync может быть выгодным, так как он будет выполнять разностное резервное копирование после создания мастер-копии, создавая резервные копии файлов, которые были изменены, проверяя метку даты и размер файла, минимизируя пропускную способность и временные рамки, в которых нужно выполнять резервное копирование. Запуск ленточного или оптического дисковода резервного копирования можно настроить с удаленным сервером резервного копирования, чтобы дополнительно высвободить ночные ресурсы для вашего рабочего веб-сервера.

При использовании совместно, прямая схема резервного копирования может быть реализована для веб-серверов (среди других систем).

Вот сценарии в использовании. Они вызываются с сервера резервного копирования на целевой сервер, а данные хранятся в «горячем» резервировании для быстрого доступа:

Сценарий 1 – Резервное копирование базы данных MySQL


#!/usr/bin/expect
set timeout 19900
spawn /bin/bash
expect -re "]# "
send "rsync -avzb -e ssh root@domain.com:/var/db/mysql/dumps/ /backup/servers/comain.com/mysqlr"
expect -re "password:"
sleep 2
send "rootpasswordr"
expect -re "total size is"
expect -re "]# "
send "exitr"

Теперь для резервного копирования данных домена (веб-сайтов) запускается второй скрипт:

Сценарий 2 – Резервное копирование домена


#!/usr/bin/expect
set timeout 19900
spawn /bin/bash
expect -re "]# "
send "rsync -avzb -e ssh root@domain.com:/home/sites /backup/servers/domain.com/homer"
expect -re "password:"
sleep 2
send "rootpasswordr"
expect -re "total size is"
expect -re "]# "
send "exitr"

Чтобы разобраться в этом:

1) Expect вызывается (ваш путь может отличаться – откройте его, введя в командной строке «whereis Ожидается»)

2) отправить команду на удаленный сервер через ssh:

Параметры rsync: -a (архив, который сохраняет разрешения и ссылки среди других элементов), v (многословно), z (сжатие) и b (резервное копирование – добавляет ~ к существующим файлам назначения, что-то вроде создания версий резервных копий)

3) пароль ‘ssh’ ‘ожидается’, или в других случаях авторизованные ключи могут быть скопированы на удаленный сервер, чтобы обойти запрос пароля для ssh.

4) ожидается пароль – который отправляется через Expect на сервер для аутентификации и выполняется операция.

5) Сценарий завершается и закрывается.

Я назвал эти файлы mysql.backup.exp и domains.backup.exp и ввел их в cron для ежедневного запуска.

Хотя это не должно быть единственной процедурой резервного копирования – может быть очень полезно иметь работающий сервер для быстрого восстановления или просмотра данных резервного копирования.

Дополнительные сценарии также могут быть записаны для резервного копирования критических файлов конфигурации (например, каталога / etc) и других областей сервера (-ов).