Как известно нельзя хранить все яйца в одной корзине. К резервным копиям базы данных это утверждение так же актуально. Если база данных имеет разумные “габариты” можно рассмотреть размещение архива на сервере FTP.
Куда?
Это наверно частый вопрос, который возникает в голове, когда задумываешься о размещении архива. Итак моя подборка:
- Собственный (приватный) FTP, размещенный либо в локальной сети, либо в другом офисе (VPN). Тут все ясно;
- Вставить USB флешку в Mikrotik и открыть сервис FTP для сервера;
- Свой хостинг провайдер. Часто мы покупаем хостинг с стотыщмиллионов Гб дискового пространства, а используем 10%. Это реальный шанс использовать его более полно;
- Бесплатный FTP сервис. Тут единственный минус – никаких гарантий сохранности. Из простых и эффективных сервисов – net2ftp.ru;
Последние два варианта требуют организацию надежного шифрования архива, чтобы попав к злоумышленникам, не упустить в общий доступ важную коммерческую информацию.
SQL Server
Множество примеров архивирования предлагают включить xp_cmdshell и выполнить формирования архива и дальнейшую его публикацию на FTP средствами SQL Server. Для меня такой вариант не приемлем, поэтому я разделил процесс на 2 этапа: формирование архивов и упаковка с отправкой на FTP.
Чтобы сформировать архив достаточно в планировщике SQL Server (SQL Server Agent), запланировать выполнение скрипта вида:
1 2 3 4 5 6 7 |
declare @db sysname = 'mydatabasename' declare @path varchar(255) = 'C:\Backup\mydatabasebackups\' declare @storage varchar(255) set @storage = @path + @db + '_ftp.bak' backup database @db to disk = @storage WITH FORMAT |
Данный скрип сформирует архив и будет перезаписывать его при каждом вызове скрипта.
Если у вас имеется уже план архивирования, то можно вместо создания еще одной копии архива базы данных использовать существующую.
Упаковка и отправка на FTP
Эта задача будет решаться bat файлом, который выполнит архивирование с паролем и публикацию на FTP сервер внесенным в планировщик Windows. При формировании задачи необходимо учесть время создания архива базы данных SQL Server. Например, формирование архива можно запланировать на 5:00 (утра), а его отправку на 6:00 (утра). Время можно выбрать произвольное исходя из загруженности сервера.
Архивирование в bat файле будет следующего вида:
1 2 3 4 |
@echo off cd C:\Backup\mydatabasebackups\ if exist mydatabase.zip del mydatabase.zip "C:\Program Files\7-Zip\7z.exe" a -pMyPASSworD -tzip -mx3 -y mydatabase.zip *.bak |
Данный скрипт занесет в архив все файлы с расширением *.bak в один архив. Это можно использовать для отправки на FTP несколько резервных копий баз данных в одном архиве (zip).
Отправку на FTP сервер можно осуществить и штатным клиентом Windows – ftp.exe, но у него один, но весомый недостаток – он не поддерживает пассивный режим. Поэтому предлагаю использовать бесплатный ncftpput (только отправляет файл)
1 |
ncftpput.exe -u ftpUserName -p ftpPassword ftpServer /serverPath/ mydatabase.zip |
Аналогично для каждого сервера, на который вы хотите разместить копию архива. Если добавить ключ -DD к ncftpput, то при успешной отправке файла он удалит его локальную копию.
Вот собственно и все. Не забывайте периодически проверять архив на предмет ошибок и актуальности, чтобы не получить сюрприз.