SQL Server 技术文档:

https://learn.microsoft.com/zh-cn/sql/sql-server/?view=sql-server-ver17

业务连续性和数据库恢复:

https://learn.microsoft.com/zh-cn/sql/database-engine/sql-server-business-continuity-dr?view=sql-server-ver17

有好几种方法,我这边对数据实时性要求没那么高,而且不需要出问题的时候主从自动切换,就做个发布-订阅的操作好了。

1,发布和订阅服务器配置host:C:\Windows\System32\drivers\etc\hosts。

由于我这边是一台外网(发布),一台内网(订阅)服务器,这里先在内外服务器配置host添加外网IP地址进去。

2,打开SQL server 配置管理器 启动服务。

3,启动TCP/IP 网络协议

4,在订阅服务器新建共享文件夹

(实测不需要)

5,发布服务器设置

配置分发:

https://learn.microsoft.com/zh-cn/sql/relational-databases/replication/configure-publishing-and-distribution?view=sql-server-ver17

在发布服务器的SSMS连上数据库后,“复制”点击右键,选择 “新建”-”“发布”

每次只能选择一个数据库发布

快照发布:
发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照。

事务发布:
在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。

对等发布:
对等发布支持多主复制。发布服务器将事务流式传输到拓扑中的所有对等方。所有对等节点可以读取和写入更改,且所有更改将传播到拓扑中的所有节点。

合并发布:
在订阅服务器收到已发布数据的初始快照后,发布服务器和订阅服务器可以独立更新已发布数据。更改会定期合并。Microsoft SQL Server Compact Edition 只能订阅合并发布。

--按需选择,我这边需求只是要一个备份服务器,所以选快照发布。

选自己需要的,或者全部

筛选不要的行,这里没需求,不操作。

默认1小时一次,如有需要自行更改。

设置代理安全性。

设置连接到发布服务器的账号。

设置发布名称,点击完成

6,发布服务器设置远程连接

SSMS本地连接上发布服务器的数据库,右键-属性

安全性上面选择登录验证,允许使用sqlserver账号密码

在连接-勾选“需要将分布式事务用于服务器到服务器的通信”

然后在SSMS,安全性-登录名-sa 右键-属性

点击常规,选择sqlserver身份验证,如果已经默认是,就跳过此步骤。

回到SSMS数据库右键-方面(Facets)

在服务器配置里面找到RemoteAccessEnabled,设置为True

打开SQL Server 配置管理器配置

配置SSCM,选中左侧的【SQL Server服务】,确保右侧的【SQL Server】以及【SQL Server Browser】正在运行

如果遇到SQL Server Browser无法启动,可以去查看服务是否启动

services.msc

找到SQL Server Browser,右键属性,把启动属性-禁用,改成自动,然后手动启动一下。

然后回到SSCM,修改一下SQL Server Browser启动模式,禁用改成自动。

确认一下tcp/ip是否开启,端口是不是1433

"客户端协议"的【TCP/IP】也修改为启用

关闭windows防火墙,或者设置防火墙设置Sql Server端口允许外部访问(借用下图)

https://blog.csdn.net/jack_yangying/article/details/78253421

--实测只设置入站规则就够了

路由器配置端口转发功能

--注意!!!!,这一步必须确保两台数据库服务器都能互相登录另一台服务器的数据库!

--前面由于没映射端口,会出现各种奇奇怪怪的报错,希望大家别走弯路。

--下面是别的参考,不一定完全一样操作,例如我这边是通过防火墙“端口映射”来解决的。

进入A电脑的网关端口,进行端口转发配置,以TL-WVR308路由器为例,在【转发规则】当中的【虚拟服务器】新增转发端口,其中外部端口可以改成其他端口,也可以和内部端口号一致,而内部端口一定为1433(sql server的默认端口),内部服务器IP地址就是A电脑的内网IP地址。

上面处理好之后,应该可以用远程连接数据库了

服务器名称直接输入ip就可以了,不用带端口号。

7,订阅服务器

在订阅服务器配置,为了从上面的发布内容拉取到订阅服务器中。

用SSMS在订阅服务器连上数据库后,“复制”右键“新建”-“订阅”

选择 查找SQL Server发布服务器

选择分发代理的位置

本地存放订阅的数据库,也可以选择新建一个

如果不需要生成脚本,下面可以不勾选

上面就完成订阅了,下面是个别问题。

1.文件夹共享问题:

右键发布查看快照代理状态

发布右键属性,看上去是共享路径,在C盘建立一个repldata文件夹然后共享,重新启动报错内容变了。

对路径“C:\repldata\unc\IZUET3KMAPWXSFZ_NETCALLDB_UIC_47\20251028174304\”的访问被拒绝。

添加Everyone共享权限解决,点击共享

2,订阅同步到数据缺表,经查发现是发布的时候就没发布,提示缺主键。

3,订阅查看同步状态,提示 进程无法连接到 Distributor +发布服务器名字。

MSSQLserver和Sqlserveragent服务是否是以域用户身份启动并运行的(.\administrator用户也是可以的,不是sqlserver用户,是windows用户),最好在配置当中专门设置一个域用户,各个发布服务器都用这个用号,统一管理,并且这个域用户对发布服务器有管理员的权限。

如果登录用的是本地系统帐户local,将不具备网络功能,会产生以下错误:     进程未能连接到Distributor '@Server name'

具体原因参考下面的地址,

https://blog.csdn.net/ljsql/article/details/7743048?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522fd1300ac562a1bae24df72052b74ba0e%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=fd1300ac562a1bae24df72052b74ba0e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-7743048-null-null.142^v102^pc_search_result_base8&utm_term=sqlserver%20%E8%BF%9B%E7%A8%8B%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5%E5%88%B0%20Distributor&spm=1018.2226.3001.4187

4,两台服务器能互相远程登录数据库,但是作业运行起来报无法连接XX(对方)计算机,可以看看上级防火墙。发现全是两台服务器的攻击提示。

添加进白名单就解决了!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐