数据库
首页 > 数据库> > SQL Server发布订阅配置及实例讲解

SQL Server发布订阅配置及实例讲解

作者:互联网

环境:

前言:

实验服务器配置:

实验一、使用发布订阅实现读写分离

需求:
在这个读写分离下,我们要求有一个主数据库,两个只读数据库。对于主数据库的更新,只读数据库要在尽可能少延迟的情况下同步更改(基于事务发布的延迟也就1-5秒)。

步骤1.1 准备数据

服务器1上面准备好数据库test以及一张表person,一个视图v_person: 在这里插入图片描述
服务器2和服务器3上新建一个test数据库就可以了。

步骤1.2 准备主数据库服务器环境

首先要确保sqlsever代理是启动的(默认安装后是禁用的):
在这里插入图片描述

步骤1.3 在主数据库上新建发布:

在sqlserver中的本地发布右键–>新建发布即可弹出新建发布向导:
在这里插入图片描述

注意:
这里有个小插曲,因为我是先安装了sqlserver后,又改了计算机的名,所以新建发布的时候弹出一个错误:
在这里插入图片描述
遇到,这个错误不要慌,只需要将当前运行的sqlserver实例名改成当前的即可。
参照:[解决方案]sql server复制需要有实际的服务器名称才能连接到服务器

点击下一步:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击完成后就开始新建,可能是我服务器环境的问题,下面弹出了一个错误提示,但这个不影响,我们直接关闭掉就行。
在这里插入图片描述

注意:从提示上看,是sqlserver代理服务没有设置为自动启动,那么我们手动将它设置自动启动即可!在这里插入图片描述

到这里,一个发布就创建好了,我们可以监视以下:
在这里插入图片描述

步骤 1.4 新建订阅

直接在主服务器上的发布上右键->新建订阅:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击“添加Sql server订阅服务器”,将我们的服务器2和服务器3分别添加进来:
在这里插入图片描述

注意:这里还是有个小插曲,原因也是安装sqlserver后又修改了计算机名,那么处理方法也是和上面一样的,这里不多说。

添加好订阅服务器后,如下图所示:
在这里插入图片描述
点击下一步后,我们设置分发代理安全性:
在这里插入图片描述
设置完成后,如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤 1.5 测试同步效果

上面几步完成后,我们可以去服务器2和服务器3观察同步的结果了。
先来看下服务器2的:
在这里插入图片描述
服务器3的数据是一样的,这里先不看。
此时我们对服务器1的数据进行增删改,如下:
在这里插入图片描述
此时,我们观察服务器3的数据:
在这里插入图片描述

实验二、复杂需求的发布和订阅

在最开始讲应用场景的时候,我提到了一个复杂的需求,那么这里就来动手实现它。首先,明确下需求:

  1. 一个总部的数据库和一个加盟商数据库。
  2. 总部里有一些数据(表person)需要同步到加盟商里。但是,在数据同步的时候,需要保证以下几个条件:
    a) 表person中的某一列不需要同步
    b) 对于已经同步到加盟商的数据,如果总部删除了,那么加盟商是不能跟着删除的
    c) 对于总部新增的数据,不需要同步到加盟商那里,当需要同步时由程序负责拷贝数据
    d) 对于已经同步的数据,如果总部改变了某列的值,那么加盟商的数据也需要跟着改变

我们明确上面的需求后,就开始做实验了,在做实验之前,让我们把总部和加盟商的虚拟机都恢复到sqlserver刚安装好的状态:

步骤2.1 准备环境和数据

总部环境:
虚拟机名:Windows Server 2019_1
操作系统:Window server 2019 DataCenter
计算机名:WIN-SERVER1
IP:192.168.3.39
数据库:Sqlserver 2014 x64 / sa:123456

加盟商环境:
虚拟机名:Windows Server 2019_2
操作系统:Window server 2019 DataCenter
计算机名:WIN-SERVER2
IP:192.168.3.40
数据库:Sqlserver 2014 x64 / sa:123456

数据:
总部新建test数据库,并准备数据:
在这里插入图片描述
加盟商新建数据库test,并创建好person表结构:
在这里插入图片描述

步骤 2.2 在总部服务器上配置发布

先启动总部服务器上的sqlserver代理,然后将“C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\ReplData“文件夹的权限设置成everyone最大。
然后,按照下面的图,一步一步向下配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击下一步后,到了下面图示,这里是重点:
在这里插入图片描述
下一步:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里,总部的发布就创建好了。

步骤2.3 修改分发服务器的配置,使之兼容数据不一致的情况

为什么会有这一步骤呢?因为加盟商只需要同步总部的update语句就行了,但是总部的update语句同步过来后,加盟商这边不一定有这行数据,如果我们没有在这里做配置的话,服务器就会认为发布订阅除了问题,进而把整个订阅停掉,所以这里一定要配置数据兼容不一致的情况。配置方式如下:
在这里插入图片描述
在这里插入图片描述

步骤2.4 新建订阅

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面填好后,如下图:
在这里插入图片描述
在这里插入图片描述
上面填好后,如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到了这里,订阅也创建好了。

步骤2.5 测试同步效果

首先,我们来检查上面配置完成后,加盟商这边的情况:
在这里插入图片描述
下面我们将加盟商的addr列补全并清空所有数据:
在这里插入图片描述

现在我们来正式测试同步的情况~

步骤 2.5.1 测试总部的insert是否同步到加盟商

首先,在总部中插入一条数据:
在这里插入图片描述
此时观察,加盟商:
在这里插入图片描述
上图说明:总部的insert语句并没有同步到加盟商那边。

步骤 2.5.2 测试总部的delete是否同步到加盟商

首先,我们在加盟商那边插入一条数据(注意,插入的数据id和总部的已有数据重复):
在这里插入图片描述
然后,总部执行删除的命令:
在这里插入图片描述
此时,我们来观察以下加盟商的数据:
在这里插入图片描述
可以看到,加盟商这边,数据并没有被删除,所以delete语句并没有同步到加盟商

步骤 2.5.3 测试总部的update是否同步到加盟商

首先,在加盟商那边插入数据:
在这里插入图片描述
我们第一次总部执行一个update语句(注意,这个被更新的数据,并不存在于加盟商中):
在这里插入图片描述
此时,我们再去查看加盟商的数据库,很显然数据是没有任何变化的,图我也不贴了。
那么,这里为什么要做这一步操作呢?还记的上面专门配置”数据不一致时继续执行么“,如果你没有做这个配置的话,此时订阅已经时停掉了!!!
下面,我们做一个有效果的更新:
更新总部的数据:
在这里插入图片描述

此时再来看看加盟商的数据情况:
在这里插入图片描述

到此,实验就完成了,可以看到,发布和订阅还是相当灵活的。

转载自:https://blog.csdn.net/u010476739/article/details/107443420

 

标签:同步,数据库,Server,实例,SQL,加盟商,服务器,总部,数据
来源: https://www.cnblogs.com/guohu/p/16558294.html