SQL Server读写分离神器,发布与订阅

SQL数据库开发

共 2961字,需浏览 6分钟

 ·

2020-03-01 23:25

点击上方SQL数据库开发,关注获取SQL视频教程


SQL专栏

SQL数据库基础知识汇总

SQL数据库高级知识汇总


发布订阅主要用来做数据库的读写分离当单台数据库的压力太大时,可以考虑这种方案。一主多从,主服务器的数据库只管写入,其他的数据库都是只读也是一种很好的方案,当然你也可以用它来实现在线备份数据的功能。


背景描述
发布服务器A: (远程端) , 数据库服务名: GUANWANG1订阅服务器B: (本机)   ,  数据库服务名: PC-LLRDBA需要从服务器A中数据库发布,然后在B中订阅A发布的数据库;


第一步:准备工作准备工作1: 配置机器名和数据库服务名一致先检查A,B中的机器名和数据库服务名是否一致,这个很重要!查看方法: 1.检查SQL Server 的服务器名称
use master
go
select @@servername
select serverproperty('servername')
(提示:可左右滑动代码)如果查出来的两个名字不一样,那就需要把他们的名字改成一样的,方法如下:2.删除所有之前配置的publishers('old_server_name'为之前的服务名)
select * from msdb.dbo.MSdistpublishers
DELETE FROM msdb.dbo.MSdistpublishers
select * from msdb.dbo.MSdistpublishers
exec sp_droplinkedsrvlogin 'old_server_name',null
exec sp_dropserver 'old_server_name', 'droplogins'


执行完后,重启SQL Server服务

3.配置计算机名与服务名一致

USE master
GO
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

 

4.查看服务名

sp_helpserver

准备工作2: 配置数据库服务器名称的别称

6b0e0d5bb0dfebf7f70411dc9df68fc6.webp

 服务器名称处使用登陆别称


因为数据库发布和订阅,不能用ip登陆,必须用服务名登陆

方法之一是改服务器的登陆别称! 

首先在本机B配置连接服务器A的登陆别称: 

先在【开始】-->【所有程序】中打开【SQL Server配置管理器】:

8fa6126b7dee69af46723db4becf05be.webp

 

 在【SQL Native Client 10.0配置(32位)】中的别名中配置,如图: 

a109b2bf95d7535f2263a9bd69a7adb3.webp


这里的别名必须和服务器B的服务器名一致也就是GUANWANG1,实际的按照自己的名字改动;

端口号是:1433

服务器是对应的服务器机器的IP地址

协议是TCP/IP 

同理,在下面的【SQL Native Client 10.0配置】中也一样配置 

de738bda7a2fa34bfa518158d1ec6ec7.webp

 修改服务器别名

然后在服务器A中也要配置访问本机B的别称,这一步不能少,否则后面本地订阅的时候会失败并报错,"进程无法连接到 Subscriber“PC-LLRDBA”。"

切记,这里是双向的,当初我查了好久才想起来,服务端也要配置这个......

具体的方法同上:注意别名是本机B的服务名PC-LLRDBA, IP是本机的IP,实在不知道在cmd下config一下就有了!

764fb87a56f52d698a06ebba4f034c29.webp

  修改服务器别名

 准备工作好了后,就进行第二步发布



第二步:发布

登陆服务器A数据库,用别名登陆:

在【复制】-->【本地发布】中右键【新建发布】

e4805ddf511553cfdf3b94bbfecba068.webp

新建发布

选择你要发布的数据库

64ccf3ba2f063fb72e72d08d56bffcf3.webp

 

选择发布类型:(具体选哪种,自己百度下各种的差异),我这里选事务发布

929a9360d1b438d37e409db2e79bcb13.webp

 

 可以选择发布的对象(表,存储过程,视图等等),也可以选择部分内容,点开勾选就行了

ab5f263fe737b3f8b326e2f29221bf7d.webp

 

 如果没有特别筛选的,就直接下一步(比如说我只要同步Order表中2014年以后的数据,那么你可以点添加,增加筛选条件) 

866d1d17009626cd212ef3f538cbdc11.webp

 

选择立即xxx,继续下一步

a6fc6636da000e2d2b9c4cb5b4f87ffe.webp

  

输入发布服务器的sa账户登陆密码就行了 

be5433288b3d142cb755752790f715a9.webp


勾选创建发布

91eab5583a9b3c6de3277c0e6eebf87c.webp

 

查看发布向导选项 

2c3c72ab2b86851c7135d2c495528d57.webp

 

创建发布成功

99dd84482becab258edf48892e59a0b3.webp

  

到此发布完成,你可以刷新后查看:

12bb9ba96c996975ee74ec260dcec6f6.webp

  


第三步:订阅

在另外一台数据库上选择【复制】-->【本地订阅】,然后右键【新建订阅】

5571d46a54c68cf0633f0a225a75fd95.webp

 

 这里选择查找SQL Server发布服务器

080849ef2e11e269311ac59a35a0379a.webp

 

 自动弹出连接数据库对话框,输入发布服务器的服务器名称,账号密码等。

a77142b6b6b630f9951be1401433338e.webp

 

连接成功后,选中需要的订阅的数据库发布:

e9d27594cc534293914653bc744ddc19.webp

 

选择在分发服务器上运行代理

15bc70b9b9b85b94255e3ebd86d195e9.webp

  

在本地新建一个同名的数据库:

71f5556eade34b321d4c91adaca2cc1c.webp

 

配置新建数据库的相关信息

b2843425b6cc632a31c4df4dfef7bb6a.webp

  

点击【与订阅服务器的连接】下面的按钮

a88c3e55a07061e55771105d69b08c24.webp

 

按下图进行配置

fa4496e6ef1b8d5faed96ff38a7bf082.webp

  

选择定义计划: 

9925681001a03be84be3581ff595aa03.webp

 

选择代理计划

807c61a22c9c9aede7e1f0c4f5520b65.webp

 

初始化订阅

1532d60d49f439148c999d38131f6c98.webp

 

初始化完成开始创建订阅

471aa3b9e57342488664c7f6a3e8fa57.webp

 

完成订阅向导

d0134b72e25a35f46343e5419cd300f2.webp

 

订阅就完成,然后刷新查看内容: 

e309af6dff08ea7ce393b4d495a3f00c.webp

等过一段时间,数据同步完成后就可以查看数据了,是否一致了!

这样订阅操作就结束了。



订阅失败案例 

订阅完成后,却发现本地订阅中没有内容,但是刚刚确实已经订阅成功了啊,为什么呢?

26c5cf68bcec02f2ed2204d63b543d6f.webp

 

然后在发布服务器中,右键本地发布中的数据库,启动复制监视器

526728488e83ddfbe77e4abab701cd57.webp

 

发现是报错了 b26a6a1606fa8f2da85154768b6b2fdf.webp


这个原因可能有好多种:

1.订阅的时候,输入的密码输错了,我第一次就是输成了发布服务器的密码 

fa4496e6ef1b8d5faed96ff38a7bf082.webp

  

2.对应的协议要开启

8e4107915569a536de25017c973eb0b0.webp

 

 

3.对应的服务要开启Sql Server Browser和Sql Server 代理(MSSQLSERVER) 

3762b0c4a2f2b6da5ec604d9ae3404ba.webp

这三个都检查无误了,基本上就搞定了吧!


此外,还有一种报错是:"对路径"XXXXX"访问被拒绝或者没有访问路径"xxx"的权限"等,这个错误一般是用户的权限不够导致的,解决方法如下: 使用SQL Server发布数据库快照的配置中,如果你选择了使用SQL Server代理,而SQL Server代理服务使用的登陆身份不具有对存放快照文件位置的读写权限时,就会出现该错误。解决的方法是可以修改SQL Server代理服务的登录身份,具体做法为:【程序】->【Sql Server Configuration Manager】->在左边栏选择【SQL Server服务】->在右侧面板中【SQL Server 代理】一行上右击,选择【属性】,在弹出的对话框中选择【内置账户】->LocalSystem即可。 

3093299f6c3e7ae2639f77c29706fb97.webp


至此,整个订阅发布的内容就结束了,感兴趣的小伙伴可以在本地安装一个虚拟机进行试验,有什么不懂的可以在底下留言~



——End——

后台回复关键字:资料领取,获取一份精心整理的技术干货

后台回复关键字:进群,带你进入高手如云的交流群。

推荐阅读


点击「阅读原文」了解SQL训练营

浏览 47
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报