Назад | Перейти на главную страницу

Сжатие и копирование больших файлов на Windows Server?

Мне было трудно копировать большие резервные копии базы данных с сервера базы данных в тестовую коробку на другом сайте. Я открыт для любых идей, которые помогут мне перенести эту базу данных без необходимости прибегать к жесткому диску USB и почте.

Сервер базы данных работает под управлением Windows Server 2003 R2 Enterprise, 16 ГБ оперативной памяти и двух четырехъядерных процессоров Xeon X5450 с тактовой частотой 3,0 ГГц. Файлы - это файлы резервных копий SQL Server 2005 размером от 100 до 250 ГБ.

Канал не самый быстрый, и файлы резервных копий SQL Server обычно сжимаются до 10-40% от оригинала, поэтому для меня имело смысл сначала сжать файлы. Я пробовал несколько способов, в том числе:

Я попытался использовать параметры WinRAR и 7-Zip для разделения на несколько сегментов. 7za.exe хорошо зарекомендовал себя для резервного копирования базы данных на другом сервере, на котором есть резервные копии ~ 50 ГБ.

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

Особенно неприятно то, что я без проблем переносил файлы аналогичного размера на Unix-серверы с помощью rsync + ssh. К сожалению, установка SSH-сервера не подходит для моей ситуации.

Например, вот как умирает 7-Zip:

H:\dbatmp>7za.exe a -t7z -v250m -mx3 h:\dbatmp\zip\db-20100419_1228.7z h:\dbatmp\db-20100419_1228.bak

7-Zip (A) 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
Scanning

Creating archive h:\dbatmp\zip\db-20100419_1228.7z

Compressing  db-20100419_1228.bak

System error:
Unspecified error

qpress для быстрого сжатия с низкой загрузкой процессора, я использовал его для резервного дампа SQL 2008 130 ГБ. Он сжат до файла размером 34 ГБ со скоростью ~ 35 МБ / с, что, на мой взгляд, впечатляет.

Если ваши утилиты задыхаются от размера файла резервной копии, просто сделайте больше файлов резервных копий, каждый будет меньше. Вы можете использовать команду резервного копирования SQL Server для использования нескольких файлов. Microsoft называет это «полосатым» резервным набором. Вот глупый пример:

резервное копирование базы данных foo на диск = 'c: \ foo.01.bak', 'c: \ foo.02.bak', 'c: \ foo.03.bak'

Вы можете указать столько файлов, сколько захотите. Полная документация по команде резервного копирования Вот.

В качестве альтернативы, если у вас есть немного денег, вы можете использовать Lightspeed от CA или аналогичный продукт. Это установка на сервере, но она сжимает все резервные копии сервера. Это приведет к сокращению времени резервного копирования, что обычно нравится администраторам баз данных и системным администраторам. CA предоставляет удобную утилиту командной строки для распаковки резервной копии, которая использует их формат, поэтому вы можете отправить файл резервной копии куда угодно.

После сжатия базы данных, не могли бы вы использовать robocopy для копирования файла?

Могли бы вы использовать rsync без ssh? Я не понимаю, где требуется шифрование, и rsync нормально работает в Windows.

Как насчет gzip через netcat? Файл (ы) должен просто пройти, не сталкиваясь с проблемами промежуточных шагов.

Просто подумал вслух ... извините, у меня нет ничего определенного.

Ну вот что я сделал;)

  • Виртуализация на обоих концах.

  • Контроллер домена на обоих концах;) Дает мне внешний резервный DC.

  • Репликация DFS для передачи;) Эта хорошо работает в фоновом режиме, использует сжатие и просто продолжает работать.

Когда мне нужно перенести нашу базу данных из центра обработки данных в офис, я просто делаю резервную копию в MSSQL, а затем снова сжимаю ее с помощью winrar. Я уменьшаю 4-гигабайтную резервную копию БД до 500 МБ, а затем просто использую FTP-сервер для передачи. Даже если он остановится, FileZilla позволит вам возобновить работу.

Скачивание занимает около 15 минут.

Попробуйте сжать с помощью IZARC http://www.izarc.org/izarccl.html - который имеет надстройку командной строки. У меня были случаи, когда сжатие не было успешным для больших файлов (размером около 25 ГБ), но выполнялось с помощью IZARC - хотя я использовал версию с графическим интерфейсом, а не надстройку командной строки.

Я тестирую это прямо сейчас:

  1. Дамп SQL в файлы .bak
  2. GZip с опцией rsyncable
  3. rsync файлы gzip.

RSync, вероятно, лучший, даже если вы его не сжимаете, потому что он только дублирует diff.

Я использую двоичные файлы cygwin, и в моем пакете есть эти полезные строки (а также многие другие, включая отправку мне журнала по электронной почте):

:: Getting a list of backup files ".bak"
dir /b c:\temp\db_backups | findstr bak > c:\temp\db_backups\filelist.txt
:: For each line in the file list from above, gzip it rsyncable!
for /F %%i IN (c:\temp\db_backups\filelist.txt) DO c:\cygwin\bin\gzip -9 --rsyncable -v -q c:\temp\db_backups\%%i

:: rsync it to a UNC path on a server
:: if you want to ssh it or ftp it you'd need to tweak the transport method
:: but I'm just using a UNC path.

c:\cygwin\bin\rsync --remove-source-files -Prv --delete --force --stats --itemize-changes --log-file=c:\temp\daily.backup.rsync.log "/cygdrive/c/temp/db_backups" "//unc/path/to/my/server/e$/dbs"

Обычно вы представляете пути UNC как \ unc \ path \ to \ my \ server ... и т. Д., Но cygwin и rsync не похожи на другой путь.

Вы также можете использовать rsync поверх ssh.

rsync -PavzrH -e "ssh" --delete --force --stats --itemize-changes --log-file=/cygdrive/c/temp/rsync_offsite_bkp.log /cygdrive/c/temp/db_backups your_user@yoursshserverhost.com:/mnt/data/share/stuff

"/ mnt / data / share / stuff" - это целевой каталог, в котором все ваши данные хранятся на сервере ssh.

Я ТАКЖЕ ПРЕДУПРЕЖДАЮ ВАС, что если вы используете cygwin (настоятельно рекомендуется), вам также понадобится в вашем домашнем каталоге cygwin папка ".ssh" и создать:

"config" "id_rsa"

Файлы, содержащие вашу конфигурацию:

Host yoursshserverhost.com
  HostName yoursshserverhost.com
  Port 22
  User your_user
  IdentityFile ~/.ssh/id_rsa
  AddressFamily inet
  BatchMode yes
  ForwardAgent yes
  ClearAllForwardings yes

Id_rsa - это ваш «ключ», который вам нужно экспортировать с вашего ssh-сервера. На данный момент у меня нет этого под рукой, но в Интернете есть информация о том, как создать ключ ssh. После того, как вы разместили его на своем сервере, вы можете скопировать его и вставить в другой файл id_rsa на вашем сервере. Вы также можете назвать его как хотите "my_special_super_secret_key", если вы укажете на него в своей конфигурации в папке .ssh в вашем домашнем каталоге cygwin.

Так:

  1. sql дамп
  2. gzip с опцией rsyncable
  3. rsync over ssh для безопасного резервного копирования / копирования файлов

RW