笔者最近碰到了需要搭建跨网段的SQL Server复制,实际的拓扑结构如下草图所示:
发布端A服务器位于CDC机房中
订阅端B服务器位于阿里云
因为SQL Server复制不支持通过IP连接分发服务器,为了解决跨网段、跨机房的问题,笔者采用了如下的解决方案:
1.设置端口映射:在防火墙中开放外网IP的1433端口对应位于CDC机房中的发布服务器A的1433端口。并且该1433端口仅对位于阿里云的服务器B开放。
2.打开位于阿里云的服务器B的1433端口,并设置仅限CDC机房服务器访问。
3.基于安全考虑,采用备份文件初始化,这样可以不必使用文件共享快照文件。
4.使用Host文件,将IP与服务器名对应。
5.由于仅仅是测试,为了简化设置,发布服务器和分发服务器都在同一个服务器上。
----------------------------------------------------------------------------------------------------
以下是实际测试搭建SQL Server 跨网段(跨机房)通过备份文件初始化复制的过程截图:
1,在订阅服务器上设置HOST文件,将CDC机房的外网IP对应发布服务器A的服务器名:
2,同样在发布服务器上设置HOST文件,将位于阿里云的订阅服务器外网IP对应订阅服务器的机器名:
3,在发布服务器和订阅服务器上分别创建Replication用户(这里仅提供了在订阅服务器创建的截图),分别用于日志读取代理器连接发布服务器和推送复制连接到订阅服务器。
4,在发布服务器上新建本地发布
此处快照文件夹可以随便设置,因为后续不会使用到。
设置基本完成。
6,备份发布数据库(需要保留一份在发布数据库上,以备创建订阅时使用):
USE [master]
GO
BACKUP DATABASE [mydb]
TO DISK = N'E:\dbbackup\full\mydb 2015-02-26_2.BAK'
WITH NOFORMAT, NOINIT, NAME = N'mydb-完整数据库备份',
SKIP, NOREWIND, NOUNLOAD,COMPRESSION, STATS = 10
GO
7,拷贝一份备份文件到订阅服务器
8,在订阅服务器还原数据库:
RESTORE DATABASE [mydb]
FROM DISK = N'D:\mydb 2015-02-26\mydb 2015-02-26.BAK'
WITH FILE = 1,
MOVE N'mydb' TO N'D:\MSSQL\Data\mydb\mydb.mdf',
MOVE N'mydb_Data' TO N'D:\MSSQL\Data\mydb\mydb_Data.ndf',
MOVE N'mydb_log' TO N'D:\MSSQL\Log\mydb\mydb_log.ldf',
NOUNLOAD, REPLACE, STATS = 10
GO
9,在发布服务器上创建订阅:
USE [mydb]
GO
EXEC sp_addsubscription
@publication = N'TranPub_mydb',
@subscriber ='mySubscriptionNm',-- 这里应该填订阅服务器的服务器名(即hosts里的名字)
@destination_db = N'mydb',
@subscription_type = N'Push',
@sync_type = N'initialize with backup',
@backupdevicetype='disk',
@backupdevicename='E:\dbbackup\full\mydb 2015-02-26.BAK'-- 这个是发布服务器上备份文件的路径
创建成功后会得到消息:
Job 'XXXX' started successfully.
Warning: The distribution agent job has been implicitly created and will run under the SQL Server Agent Service Account.
10,最后还需要修改订阅端的连接:
打完收工,文字不多,以图片说话,如有不明白的地方请大家留言就是。
参考文献:
https://technet.microsoft.com/zh-cn/library/ms147834(v=sql.105)
http://www.cnblogs.com/gaizai/archive/2013/09/18/3328511.html