这篇文章是解决项目的集大成篇。此次项目的关键是如何在广域网上实现两个主机中的数据实时同步,前两篇文章都是为这篇文章做准备。我面临的情形比较特殊,参考了网上诸多教程,走了许多的弯路,才终于实现了我的目的。
====================正文分割线======================
如何使用Server 2008做备份前期知识主要参考dudu的文章: http://www.cnblogs.com/dudu/archive/2010/08/26/1808540.html
这远没有解决问题,还有以下诸多问题dudu的文章中没有提到:
1. 订阅时填写发布服务器名必须要为计算机名,在局域网内直接写主机名是可以直接访问的(dudu的文章测试环境是在局域网内)。但是广域网的情形,必须使用“IP+端口”的情形才能访问。这就需要设置别名。在端口是默认情形下,可以通过设置host来解决(注:未测试),但是端口更改情形是不行的。解决办法:打开 Sql Server Configuration Manager, 找到 SQL Native Client 10.0配置(32位)->别名,点击右键“新建别名”,填上远程计算机名,IP,端口等信息。保存之后在SQL Native Client 10.0配置做同样事情。注意仅在“SQL Native Client 10.0配置”添加别名是无法访问的!如图:
2. 如果SQL Server安装好之后,更改了计算机名,在SQL server上需要做相应的更改。首先是服务器名的更改,可以执行下面脚本来确定计算机名和服务器名是否一致:
IF serverproperty('servername')<>@@servername BEGIN DECLARE @server SYSNAME SET @server=@@servername EXEC sp_dropserver @server=@server SET @server=cast(serverproperty('servername') AS SYSNAME) EXEC sp_addserver @server=@server,@local='LOCAL' END ELSE PRINT '实例名与主机名一致,无需修改!'
此外还要对计算机用户名进行修改。在 安全性->登录名里找到以旧计算机名称开始的登录名(一般是windows用户),将其修改为 新计算机名\用户名,如图:
3. FTP跨路由问题,请参考上一篇文章: 使用filezilla server搭建FTP服务器。搭建好FTP服务器并且在发布服务器订阅好之后就能解决“由于出现操作系统错误 3,进程无法读取文件“D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\ReplData\unc\XXX”的错误。
4. 本文章的重点,也是最纠结的一点: SQL Server使用FTP方式进行跨网复制同步。 经过以上步骤,订阅服务器能够访问发布服务器,使用FTP客户端也能够正常访问发布服务器的快照目录。但是在订阅同步的时候却始终不成功,发布服务器上的内容完全没有同步到订阅服务器上。通过观察同步日志发现订阅服务器不能从下载快照文件,打开服务器上的FTP软件,果然订阅服务器视图下载快照文件的时候失败,出现了”425, can’t open data connection“的错误。
这不科学!使用FTP软件下载同样的文件,直接就下载下来了毫无违和感!然后我想是不是SQL Server的问题,特定学了一下dos下的FTP软件,发现获取目录列表的时候也出现了同样的错误!这是为什么?使用客户端下载就好好的!
然后各种百度谷歌,最终确定是因为客户端和主机都位于路由器后面,不能使用主动模式而被动模式的缘故:SQL Server使用active模式去访问发布服务器的FTP,由于订阅服务器位于路由后面,从而失败。
接下来接着各种百度谷歌如何让SQL Server以passive模式连接FTP服务器,各种努力之后失败告终。最后的解决办法:将订阅服务器做DMZ处理或者将所有端口请求转发到订阅服务器,然后将SQL server的分发服务软件 “C:\Program Files\Microsoft SQL Server\100\COM\DISTRIB.exe” 添加到防火墙例外,允许任意端口连接(最懒的办法是直接关闭防火墙,但是这应该不是正常人干的…)。
经过好几天的折腾,纠结以及各种模拟实验,终于解决了这个问题~~我先休息会~_~
发表回复