筆者最近碰到了需要搭建跨網段的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]GOBACKUP 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 = 10GO
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 = 10GO
9,在發布服務器上創建訂閱:
USE [mydb]GOEXEC sp_addsubscription @publication = N'TranPub_mydb', @subscriber ='mySubscriptionNm', @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
http://www.cnblogs.com/gaizai/p/3309567.html
新聞熱點
疑難解答