понедельник, 7 июля 2014 г.

Windows: настраиваем резервное копирование с помощью rsync

Дано:
1) Компьютер WinSRV под управлением Windows 2008 с установленной на нём СУБД SQL Server 2012 Express и развёрнутой базой MyDatabase. Будем считать, что аккаунт с административными правами называется winuser.
2) Компьютер DebSRV под управлением Debian 6.0, доступный по ssh (порт 12345) с логином debuser, и содержащий папку, предназначенную для резервных копий: /media/backup/.

Задача:
Настроить ежедневное резервное копирование баз с первого компьютера на второй.

Решение:

Выбираем инструментарий. Предлагаем на стороне WinSRV использовать:
1) Архиватор 7-zip, установленный в папке c:\Program Files\7-Zip
2) rsync из пакета cygwin. Этот пакет установлен в папке c:\cygwin64 и помимо rsync содержит, в частности утилиты ssh.exe и ssh-keygen.exe, которые нам понадобятся.

На компьютере WinSRV создаём рабочую папку для задачи архивирования, c:\backup.
В этой папке создаём два вспомогательных файла.
Файл backup.sql:
-- создаём резервную копию базы MyDatabase
BACKUP DATABASE MyDatabase TO DISK='c:\backup\MyDatabase.bak'

-- создаём резервные копии системных баз
BACKUP DATABASE master TO DISK='c:\backup\master.bak'
BACKUP DATABASE model TO DISK='c:\backup\model.bak'
BACKUP DATABASE msdb TO DISK='c:\backup\msdb.bak'
Файл filelist.txt:
c:\backup\MyDatabase.bak
c:\backup\master.bak
c:\backup\model.bak
c:\backup\msdb.bak
Создаём командный файл backup.bat:
rem создаём бэкапы баз
"c:\Program Files\Microsoft SQL Server\110\Binn\SQLCMD.exe" -U (логин к базе) -P (пароль к базе) -S . -i c:\backup\backup.sql -o c:\backup\log.txt

rem архивируем бэкапы в один файл
"c:\Program Files\7-Zip\7z.exe" -a -r -p(пароль к архиву) c:\backup\MSSQL_%date:~10,4%%date:~7,2%%date:~4,2%.7z @c:\backup\filelist.txt -xr!*.log

rem передаём архив на сервер DebSRV при помощи rsync
c:\cygwin64\bin\rsync.exe -e "/bin/ssh.exe -p 12345" -t /cygdrive/c/backup/MSSQL_%date:~10,4%%date:~7,2%%date:~4,2%.7z debuser@DebSRV:/media/backup

rem удаляем лишние файлы
del c:\backup\MSSQL_%date:~10,4%%date:~7,2%%date:~4,2%.7z c:\backup\MyDatabase.bak c:\backup\master.bak c:\backup\model.bak c:\backup\msdb.bak

Настраиваем доступ на сервер DebSRV по ssh без пароля. Мы сделали это так:
1) На сервере WinSRV создали приватный и публичный ключ командой:
c:\cygwin64\bin\ssh-keygen.exe -t dsa -N ''
результатом работы этой утилиты являются два файла, c:\cygwin64\home\winuser\.ssh\id_dsa и c:\cygwin64\home\winuser\.ssh\id_dsa.pub
2) Закинули публичную часть ключа на сервер DebSRV (предполагается, что папка /home/debuser/.ssh/ на этом сервере уже есть):
c:\cygwin64\bin\rsync.exe -e "/bin/ssh.exe -p 12345" -t /home/winuser/.ssh/id_dsa.pub debuser@DebSRV:~
дальше заходим на сервер DebSRV по ssh
ssh debuser@DebSRV -p 12345
и добавляем содержимое файла id_dsa.pub в файл ~/.ssh/authorized_keys2:
cat id_dsa.pub >> ~/.ssh/authorized_keys2
rm id_dsa.pub

После этого на компьютере WinSRV в планировщике задач ставим на выполнение файл c:\backup\backup.bat от имени winuser с нужным расписанием, и всё.

Комментариев нет:

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