SQL Server:使用rsync实现异地日志传送

微软有一个爱好叫绑定。我最痛恨的一个绑定是IIS与Windows的绑定——升级IIS竟然要升级操作系统,服务器不是PC,系统不是想重装就可以重装。

在使用SQL Server日志传送进行异地备份时,又被微软的绑定策略坑了一次。日志传送只支持Windows文件共享这1种也仅此1种方式,而用于异地备份的服务器与主服务器不在同一个网络中,根本无法使用Windows文件共享。下图就是微软绑定策略的证据:

上图中的共享路径 \\dbserver\LogBackup 是在日志传送主服务器上设置的,备份服务器进行日志传送时,需要访问这个路径,复制其中的日志备份文件并进行恢复。

而异地备份时,备份服务器与主服务器不在同一个网络,无法通过这个共享路径访问到要传送的日志文件。

怎么解决这个问题呢?

如果用Windows架构VPN,你就上了微软绑定策略的当。

我们没上这个当,用移花接木之法解决这个问题。

备份服务器不是需要访问 \\dbserver\LogBackup 吗?那我们就在与备份服务器同一个网络的另外一台服务器(中间服务器)上共享出一个这样的路径,对于备份服务器来说,只要能访问 \\dbserver\LogBackup 就行,才不管是谁共享的呢。

共享路径的问题解决了,但是备份服务器访问共享路径的真正目的是复制日志备份文件。所以,接下来的问题是如何将远程主服务器上的日志备份文件同步到这台中间服务器上?

你可能想到的是FTP,我们开始也是这么想的。但是FTP是上传/下载的利器,但不是同步的利器。我们这里的场景是中间服务器要与远程主服务器上的日志备份文件进行同步,比如远程主服务器会自动删除超过多少天的日志备份文件,主服务器上删除了,中间服务器也要自动删除。

后来想到了我们在用的文件同步利器——rsync(使用方法可以参考之前的一篇博文:Windows平台网站文件同步备份解决方案——cwRsyn),这也是开源世界的杰作,东西虽然看起来简单、丑陋,但解决起问题来就是那么有效。

我们就靠rsync解决了SQL Server的异地恋问题,轻松实现了异地自动化日志传送。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/SQLServer/

分享一下使用的rsync命令:

rsync -avz --delete --no-super rsync://远程主服务器/logbackup  /cygdrive/e/LogBackup

解决问题后的感想

在想到rsync之前,我们打算采用的方法是在远程主服务器跑FTP服务,然后通过写C#代码从远程主服务器上FTP下载日志备份文件实现同步。即使这部分代码写起来不复杂,但从创建项目到发布项目整个加起来的时间会远远超过部署rsync的时间。

所以,对于程序员来说,仅仅会写代码解决问题是不够的。真正的程序员不仅追求代码写得有多漂亮,而且追求用更巧妙的方式解决问题,哪怕不写一行代码,哪怕解决的不是技术问题。

用一句话结束这篇博文:如果把解决问题当作乐趣,程序人生将其乐无穷。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索日志
, 问题
, 服务器
, 文件
, 备份
, sql2005 异地备份
, 异地备份
, 共享文件访问日志
, 绑定日志
, 日志绑定
, 远程写文件
, FTP远程备份
, 异地
异地自动备份
sql server 2008、sql server、sql语句、sql server 2012、sql server 2005,以便于您获取更多的相关知识。

时间: 2024-08-02 20:12:31

SQL Server:使用rsync实现异地日志传送的相关文章

SQL Server误区:在破坏日志备份链后需要完整备份来重新开始日志链

误区 #20:在破坏日志备份链之后,需要一个完整备份来重新开始日志链 错误 事务日志备份会备份自上次事务日志备份以来所有的事务日志(如果从来没有过日志备份的话,那就从上一次完整备份开始).有好几种类型的操作会中断事务日志的连续性,也就是说除非重新开始新的日志链,SQL Server无法再进行日志备份.下面这几种操作都有可能引起日志链断裂: 由完整恢复模式或大容量事务日志恢复模式转为简单恢复模式 从数据库镜像进行恢复 备份日志时指定了NO_LOG 或 WITH TRUNCATE_ONLY(还好在S

sql server 数据库操作报错“日志不可用”

问题描述 sql server 数据库操作报错"日志不可用" 在操作数据库时查询信息操作没有问题,但增删改操作时就会报下面的错误请问是什么原因: 消息 9001,级别 21,状态 1,第 2 行 数据库 'hrtest1' 的日志不可用.有关相应错误消息,请查看事件日志.修复所有错误后重新启动数据库. 解决方案 SQL Server 数据库操作关于SQL Server数据库日志已满的解决方法SQL Server 数据库操作总结(sql语法的使用) 解决方案二: recovery下数据库

SQL Server数据库状态监控 - 错误日志

无论是操作系统 (Unix 或者Windows),还是应用程序 (Web 服务,数据库系统等等) ,通常都有自身的日志机制,以便故障时追溯现场及原因.Windows Event Log和 SQL Server Error Log就是这样的日志, PS: SQL Server 中的错误日志 (Error Log) 类似于 Oracle中的alert 文件. 一. 错误日志简介 1. Windows事件日志与SQL Server 错误日志 Windows事件日志中,应用程序里的SQL Server和

2. SQL Server数据库状态监控 - 错误日志

原文:2. SQL Server数据库状态监控 - 错误日志 无论是操作系统 (Unix 或者Windows),还是应用程序 (Web 服务,数据库系统等等) ,通常都有自身的日志机制,以便故障时追溯现场及原因.Windows Event Log和 SQL Server Error Log就是这样的日志, PS: SQL Server 中的错误日志 (Error Log) 类似于 Oracle中的alert 文件. 一. 错误日志简介 1. Windows事件日志与SQL Server 错误日志

SQL SERVER中如何手动增长日志文件和数据文件

手动增长日志文件,实际上就是修改日志文件的大小  size 的单位是MB 下面设置日志文件大小是2048MB ALTERDATABASE[GPOSDB] MODIFY FILE(name=GPOSDB_Log,size=2048) EXEC sys.[sp_helpdb] @dbname = [GPOSDB] -- sysname --收缩日志文件 USE [GPOSDB] GO ALTER DATABASE [GPOSDB] SET RECOVERY SIMPLE; GO --设置简单恢复模式

Sql Server 2000 如何减小数据库日志文件.ldf的文件大小

-- 减小数据库日志文件LDF大小DECLARE @db NVARCHAR(20) SET @db = '数据库名' DUMP TRANSACTION @db with no_log BACKUP LOG @db with no_log DBCC SHRINKDATABASE(@db)前几天我的数据库SQL server 报日志满错误,于是变改了log.ldf的空间为20G,虽然不报错了,但占了硬盘很大空间啊,还要备份数据库呢.这样我就在网上搜索到上面脚本,在确定数据库目前运行稳定,不需要查询以

sql server如何清除维护相关日志

---1.查看作业历史记录 SELECT TOP 1000 [instance_id]      ,[job_id]      ,[step_id]      , [step_name]      ,[sql_message_id]      , [sql_severity]      ,[message]      , [run_status]      ,[run_date]      , [run_time]      ,[run_duration]      , [operator_id

SQL Server 2008 收缩清空大日志文件方法总结

由于SQL2008对文件和日志管理进行了优化,所以在SQL2000和2005中可以运行的如下命令,但在SQL2008中不支持no_log清空日志. 1.清空日志  代码如下 复制代码 DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志:  代码如下 复制代码 BACKUP LOG 库名 WITH NO_LOG SQL 2008收缩清空日志方法: 1.在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完整模式,一定必务要再改回完整模式,不然数据库

SQL Server恢复模型之批量日志恢复模式_MsSql

你是否想知道为什么事务日志文件会变得越来越大?事务日志有时候甚至会比你的实际数据库文件还要大,尤其是在应用数据仓库的情况下.为什么会发生这种情况呢?如何控制其大小?数据库恢复模型如何控制事务日志增长?在本系列文章中,我们就将一一给出解答. 批量日志恢复模式 批量日志恢复模式与完整恢复模式类似,都预期会有大批量的数据修改操作(例如,创建索引,SELECT INTO,INSERT SELECT,BCP,BULKINSERT),在这种情况下可以最小化日志记录量,因此它降低了性能影响.但是同时代价就是你