SQL Server 跨网段(跨机房)通过备份文件初始化复制
笔者最近碰到了需要搭建跨网段的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
http://www.cnblogs.com/gaizai/p/3309567.html
SQL Server 跨网段(跨机房)通过备份文件初始化复制的更多相关文章
- SQL Server 中的跨库视图
SQL Server 中的跨库视图 在一个SQL中,有多个数据库,A.B.C,在使用C为连接库中,现在要查询A中的表T1. 那么,在C中建创视图(A_T1). SELECT *FROM A.dbo.T ...
- SQL Server 数据库同步,订阅、发布、复制、跨服务器
随便说两句 折腾了一周,也算把数据库同步弄好了.首先局域网内搭建好,进行各种测试,弄的时候各种问题,弄好以后感觉还是挺简单的.本地测试好了,又在服务器进行测试,主要的难点就是跨网段同步,最后也解决了, ...
- SQL Server 通过备份文件初始化复制
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 疑问(Questions) 参考文 ...
- Step3 SQL Server 通过备份文件初始化复制
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 疑问(Questions) 参考文 ...
- SQL Server 通过备份文件初始化复制 – 听风吹雨
一.背景 MySQL在对有历史数据的数据库进行搭建复制(Master/Slave)的时候,可以通过在Master服务器备份历史数据,利用这个备份文件 在Slave进行还原:这样做的好处是可以更加快速的 ...
- (1)sql server 同网段复制
转自:https://blog.csdn.net/hliq5399/article/details/51678774(文末有复制系列文章链接) 一.背景 在复制的运用场景中,事务发布是使用最为广泛的, ...
- SqlServer 跨网段跨服务器复制
注意:被同步的表必须有主键,否则无法同步.对数据库进行操作时需要登录服务器,在服务器本地进行操作,远程对数据库进行操作不能完成所有的步骤 准备工作: 1.将发布数据库完整备份到订阅服务器上,并在订阅服 ...
- SQL Server Agent Job 中用Powershell将备份文件拷贝到AWS S3
SQL Server 数据库备份后,如何再复制一份到AWS S3 上,步骤和需要注意的地方如下: 1. 首先在SQL Server 中创建一个Credential 2. 授权这个Credential ...
- SQL Server 数据变更时间戳(timestamp)在复制中的运用
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 方案(Solution) 方案一(Solution One) 方案二(Solution Two ...
随机推荐
- Python基础之好玩的字符串格式化之类C风格
今天白月黑羽和大家说说字符串格式化,在python3中,字符串格式化主要有2种方法,今天先和大家介绍类C风格的printf. printf 风格 这种方式 和 传统的C语言printf函数使用一样的格 ...
- Python学习--23 内建模块及第三方库
本文将介绍python里常用的模块.如未特殊说明,所有示例均以python3.4为例: $ python -V Python 3.4.3 网络请求 urllib urllib提供了一系列用于操作URL ...
- Java 容器源码分析之1.8HashMap方法讲解
前言:Java8之后新增挺多新东西,在网上找了些相关资料,关于HashMap在自己被血虐之后痛定思痛决定整理一下相关知识方便自己看.图和有些内容参考的这个文章:http://www.importnew ...
- 【angular5项目积累总结】文件上传
<div class="form-group row"> <label class="col-sm-2 col-form-label"> ...
- el-upload源码修改跳坑
之前给element-ui提了一个问题,结果没有鸟我,没办法,只能修改源码来满足需求了 (备注:element-ui2依然没有修改,为了迎合产品还是要改源码) 本文讨论的组件属性仅限于list-typ ...
- jQuery实现DropDownList(MVC)
今天学点什么呢?想来想去觉得DropDownList还是要加强功力,因为以前写ASP.NET网站时,此功能用的非常之多.在练习之前,先温习一下以前练习的<Html.DropDownListFor ...
- MFC函数—CSingleDocTemplate
前提:在InitInstance() 函数的初始化过程中,我们可以看到代码CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDoc ...
- [日常] Go语言圣经-文本和HTML模板习题
Go语言圣经-文本和HTML模板 练习 4.14: 创建一个web服务器,查询一次GitHub,然后生成BUG报告.里程碑和对应的用户信息. 1.查看下文档godoc net/http |grep H ...
- 【JavaFx教程】第二部分:Model 和 TableView
第二部分的主题 创建一个 模型 类. 在 ObservableList 使用模型类. 使用 Controllers 在 TableView 上显示数据. 创建 模型 类. 我们需要一个模型类来保存联系 ...
- HDU4725(KB4-P SPFA+LLL+SLF优化)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...