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


    环境:

    • vmware workstation prop 15.1
    • window server 2019 datacenter
    • sqlserver2014 x64

    前言:

    • 什么是发布和订阅?
      发布和订阅属于sqlserver的复制技术,引用官网的解释:

      复制是一组技术,它将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库之间进行同步以保持一致性。
      官网说明:https://docs.microsoft.com/zh-cn/sql/relational-databases/replication/sql-server-replication?view=sql-server-ver15

    • 发布订阅可以做什么?
      正如上面所说的,发布订阅可以让你在不同的数据库中交换数据。那么具体的应用场景呢?下面我总结了几个:

      • 数据库读写分离:
        通过对一个主库的进行“事务复制”,我们可以将每次主库的更新都同步到只读库上,从而达到读写分离的效果,进而提高系统性能。
      • 数据库高可用方案:能将主库的更改实时同步到其他库中
      • 与其他系统进行数据对接:
        在与第三方公司做对接时,可以直接将数据库中的指定表/指定列,甚至指定行的数据同步更新到对方的数据库里面,这样就减少了开发量。
      • 总库和分库之间交换数据:
        本人遇到过一个需求:在一个erp系统中,总部和加盟商各自有一个数据库,总部给加盟商派发货物后,程序会自动将总部的相关商品档案数据提取到加盟商的库中,对于那些未派发的货物不要提取,并且对于已经提取的货物还要跟随总部的更新(比如说:总部变更商品的颜色名称,加盟商也要跟着变),另外总部删除的数据,加盟商不要同步删除。,这个时候我们也可以通过发布订阅实现,只不过设置复杂一点(除了设置仅复制update语句之外,还要配置分发服务器处理数据不一致的情况)。
    • 怎么做发布订阅?
      在sqlserver管理端,找到复制下面的发布和订阅,跟着向导新建即可。下面我将用几个实例演示发布订阅的功能!

    实验服务器配置:

    • 服务器1:
      虚拟机名称:Windows Server 2019_1
      计算机名:WIN-SERVER1
      ip:192.168.3.39
      操作系统:window server 2019 datacenter
      数据库:sqlsever2014 x64
      数据库sa密码:123456
    • 服务器2:
      虚拟机名称:Windows Server 2019_2
      计算机名:WIN-SERVER2
      ip:192.168.3.40
      操作系统:window server 2019 datacenter
      数据库:sqlsever2014 x64
      数据库sa密码:123456
    • 服务器3:
      虚拟机名称:Windows Server 2019_3
      计算机名:WIN-SERVER3
      ip:192.168.3.41
      操作系统:window server 2019 datacenter
      数据库:sqlsever2014 x64
      数据库sa密码:123456

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

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

     
  • 相关阅读:
    h5及c3新增的一些内容
    Ajax实现步骤和原理
    prototype和__proto__的关系是什么?
    深拷贝与浅拷贝
    promise与async和await的区别
    ph

    p
    python4
    python3
  • 原文地址:https://www.cnblogs.com/guohu/p/16558294.html
Copyright © 2020-2023  润新知