我一直在很难从数据库服务器的大型数据库备份复制到另一个站点的testing框。 我愿意接受任何可以帮助我移动数据库的想法,而不必诉诸USB硬盘驱动器和邮件。
数据库服务器运行Windows Server 2003 R2 Enterprise,16 GB RAM和两个四核3.0 GHz Xeon X5450。 文件是100 GB到250 GB之间的SQL Server 2005备份文件。
pipe道不是最快的,SQL Server备份文件通常压缩到原来的10-40%,所以我首先压缩文件是有意义的。 我已经尝试了很多方法,包括:
我试图使用WinRAR和7-Zip选项来分割成多个段。 7za.exe对于我在另一台服务器上进行数据库备份的工作非常有效,它有大约50GB的备份。
我也试着用各种实用程序先分割.BAK文件,并压缩生成的段。 没有这种方法的喜悦,不pipe我已经尝试过的工具,它最终会抵制文件的大小。
特别令人沮丧的是,我已经使用rsync + ssh在Unix上传输了类似大小的文件。 不幸的是,安装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
快速压缩低cpu负载快速压缩,我用它的130GB SQL 2008备份转储。 它压缩到34GB的文件,我认为这是令人印象深刻的〜35MiB / s。
你可以使用rsync,没有SSH? 我没有看到encryption是一个需求,rsync在Windows上运行正常。
如何通过netcat gzip? 文件应该通过,而不会遇到中间步骤的问题。
只是想大声…对不起,我没有什么明确的。
在压缩分贝后,你可以考虑使用robocopy来复制文件吗?
如果你的工具阻塞了备份文件的大小,那就制作更多的备份文件,每个备份文件都会更小。 您可以让SQL Server备份命令使用多个文件。 微软称这是一个“条带化”的备份集。 这是一个愚蠢的例子:
备份数据库foo到磁盘='c:\ foo.01.bak','c:\ foo.02.bak','c:\ foo.03.bak'
您可以指定尽可能多的文件,因为你会关心。 有关备份命令的完整文档在这里 。
另外,如果你有一些钱可以使用CA的Lightspeed或类似的产品。 这是服务器上的安装,但会压缩所有服务器备份。 这将缩短备份时间,DBA和系统pipe理员通常会这样做。 CA提供了一个可分离的命令行工具来解压缩使用其格式的备份,因此您可以将备份文件发送到任何位置。
那么这里是我做的;)
两端虚拟化。
域控制器两端)给我一个外部直stream备份。
DFS复制传输;)这一个在后台运行良好,使用压缩,只是不停地滴答。
当我需要将数据库从数据中心移到办公室时,我只需在MSSQL中进行备份,然后再用winrar进行压缩。 我把一个4 GB的数据库备份降低到500MB左右,然后我只是使用FTP服务器进行传输。 即使停止FileZilla将让你恢复。
花大约15分钟下载。
尝试使用IZARC压缩http://www.izarc.org/izarccl.html – 它有一个命令行插件。 我有压缩的情况下大型文件(大小约25GB)不成功,但使用IZARCpipe理 – 尽pipe我使用gui版本而不是命令行插件。
我现在正在testing这个:
RSync可能是最好的,即使你没有gzip它,因为它只是增加差异。
我正在使用cygwin二进制文件,我的批处理有这些有用的行(以及许多其他包括通过电子邮件发送日志):
:: Getting a list of backup files ".bak" dir /bc:\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 -qc:\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"
通常你将UNCpath表示为\ unc \ path \ to \ my \ server …等,但是cygwin和rsync没有其他方式。
你也可以通过ssh使用rsync。
rsync -PavzrH -e "ssh" --delete --force --stats --itemize-changes --log-file=/cygdrive/c/temp/rsync_offsite_bkp.log /cygdrive/c/temp/db_backups [email protected]:/mnt/data/share/stuff
“/ mnt / data / share / stuff”是所有东西都存储在ssh服务器上的目标目录。
我也会警告你,如果你正在使用cygwin(强烈推荐),你还需要在你的cygwin主目录下有一个“.ssh”文件夹,并创build一个:
“config”“id_rsa”
包含你的configuration的文件:
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密钥的信息。 一旦你在你的服务器上创build了它,你就可以将它复制并复制到服务器上的另一个“id_rsa”文件中。 只要你在你的configuration文件中指向cygwin主目录中的.ssh文件夹,你也可以命名它为“my_special_super_secret_key”。
所以:
RW