一、准备一个Docker的sqlserver

#创建挂载数据文件夹
mkdir -p /home/mssql/data
#创建挂载日志文件夹
mkdir /home/mssql/log
#给文件夹权限
chmod 777 /home/mssql/data
chmod 777 /home/mssql/log
#创建mssql的docker容器
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=sa123456." -e "MSSQL_AGENT_ENABLED=true" -p 1433:1433 --name mssql -h mssql \
-v /home/mssql/data:/var/opt/mssql/data \
-v /home/mssql/log:/var/opt/mssql/log \
-d mcr.microsoft.com/mssql/server:latest

安装完通过SqlServer Management能连上了

二、配置分发服务器

这里分发服务器也是用数据库服务器充当,实际项目中如果有多余服务器可以用另外的服务器

1、创建发布服务器存快照的文件夹

#进入docker
docker exec -it mssql bin/bash
#创建快照文件夹
mkdir /var/opt/mssql/ReplData
#给权限
chmod 777 /var/opt/mssql/ReplData
#退出容器
exit

2、错误的配置分发服务器做法

这里不要用数据库管理工具上面的配置分发服务器,下面的是错误的做法

如果直接在界面配置的分发服务器,虽然能成功,但下发创建本地发布的时候会报"必须先将 xxx 作为发布服务器启用,然后才能创建发布。在下列对话框中,将此服务器作为发布服务器启用"

3、正确配置分发服务器方法

 1 )查询数据库的所在docker的hostname

select @@servername

  2)创建分发数据库

在数据库中执行

use master
GO
EXEC sp_adddistributor @distributor = N'mssql'
GO
EXEC sp_adddistributiondb @database = N'distribution', @data_folder = N'/var/opt/mssql/data',
@log_folder = N'/var/opt/mssql/data', @log_file_size = 2, @min_distretention = 0, @max_distretention = 72,
@history_retention = 48, @deletebatchsize_xact = 5000, @deletebatchsize_cmd = 2000, @security_mode = 1,@password='sa123456.'
GO
SELECT name, create_date FROM sys.databases
GO
@distributor:上面查出的数据库的hostname
@database:分发数据库名称
其他参数代表什么意思在这里查看:https://learn.microsoft.com/zh-cn/SQL/relational-databases/system-stored-procedures/sp-adddistributiondb-transact-sql?view=sql-server-ver16

3)创建分发服务器
在数据库中执行
USE [distribution]

IF (NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'UIProperties' AND type = 'U ')) 

CREATE TABLE UIProperties(id INT)

GO

IF (EXISTS (SELECT * FROM ::fn_listextendedproperty('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', null, null)))
EXEC sp_updateextendedproperty N'SnapshotFolder', N'/var/opt/mssql/ReplData', 'user', dbo, 'table', 'UIProperties' ELSE EXEC sp_addextendedproperty N'SnapshotFolder', N'/var/opt/mssql/ReplData', 'user', dbo, 'table', 'UIProperties' GO EXEC sp_adddistpublisher @publisher = N'mssql', @distribution_db = N'distribution', @security_mode = 1, @working_directory = N'/var/opt/mssql/ReplData', @trusted = N'false', @thirdparty_flag = 0, @publisher_type = N'MSSQLSERVER'
@publisher:上面的hostname
@distribution_db:分发数据库名称
/var/opt/mssql/ReplData:这个路径为上面创建的路径

执行完就创建成功分发服务器了,能看到复制文件夹多出了一些菜单了

三、创建数据库发布

1、准备数据库
这里创建一个数据库 MyDb(主库)和创建一个数据库MyDbSlaver(从库,不建表,通过主库的快照同步)
如果是实际项目中,数据库的数据量已经很大的情况下,建议从库从主库还原一份,不要通过快照同步,因为这个过程会占服务器的cpu很高,会影响到服务器
然后给MyDb(主库)创建一个表测试用
CREATE TABLE SysUser (
ID INT PRIMARY KEY,
UserName NVARCHAR(50),
Age INT
);

2、新建发布

选择事务发布,如想用其它发布类型,看对应说明

全部勾选

成功创建发布

四、创建数据库订阅

1、创建订阅

创建订阅成功

创建订阅成功后能看到从库把主库的表也同步过来了

 2、验证效果

在MyDb操作的数据,在从库MyDbSlaver查到的结果是一样的



Docker下的SqlServer发布订阅启用的更多相关文章

  1. SqlServer发布订阅

    我们在开发系统的时候,经常会遇到高并发的问题,还有高可用性和安全性方面的考虑,需要用读写分离的方案来解决问题.也就是在我们使用数据库比较多,更新少而查询比较多的情况下使用读写分离,实现提高性能,减少数 ...

  2. SqlServer发布订阅错误收集

    原文:SqlServer发布订阅错误收集 目录 1. SqlServer发布订阅错误收集 1.1. Message:脚本对于表"dbo.table"失败. 1.1.1. 错误消息 ...

  3. SQLServer 发布订阅(Replication)造成的Memroy压力(cmemthread等待)

    深入了解下发布订阅:     数据复制:允许一个数据源向一个或多个目标数据库分发数据,只需要OLE DB 访问接口即可访问: 整个复制框架包含:复制组件,复制代理,复制类型: 复制组件: 发布服务器: ...

  4. 知方可补不足~Sqlserver发布订阅与sql事务的关系

    回到目录 前几讲说了一下通过sqlserver的发布与订阅来实现数据的同步,再通过EF这个ORM架构最终实现架构系统的读写分离,而在使用发布与订阅来实现数据同步时,需要我们注意几点,那就是当操作被使用 ...

  5. Javascript中理解发布--订阅模式

    Javascript中理解发布--订阅模式 阅读目录 发布订阅模式介绍 如何实现发布--订阅模式? 发布---订阅模式的代码封装 如何取消订阅事件? 全局--发布订阅对象代码封装 理解模块间通信 回到 ...

  6. SQL Server 发布订阅 发布类型详解

    MicrosoftSQL Server 提供了三种复制类型. 每种复制类型都适合于不同应用程序的要求. 根据应用程序需要,可以在拓扑中使用一种或多种复制类型: 快照复制 事务复制 合并复制 为了帮助您 ...

  7. 观察者模式 vs 发布-订阅模式

    我曾经在面试中被问道,_“观察者模式和发布订阅模式的有什么区别?” _我迅速回忆起“Head First设计模式”那本书: 发布 + 订阅 = 观察者模式 “我知道了,我知道了,别想骗我” 我微笑着回 ...

  8. RabbitMQ 发布订阅

    互联网公司对消息队列是深度使用者,因此需要我们了解消息队列的方方面面,良好的设计及深入的理解,更有利于我们对消息队列的规划. 当前我们使用消息队列中发现一些问题: 1.实际上是异步无返回远程调用,由发 ...

  9. [转] Javascript中理解发布--订阅模式

    发布订阅模式介绍 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 现实生活中的发布- ...

  10. 【转】Javascript中理解发布--订阅模式

    Javascript中理解发布--订阅模式 阅读目录 发布订阅模式介绍 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时 ...

随机推荐

  1. DB2---创建返回结果集的函数

    在数据验证中,经常遇到需返回结果集的操作,故整理一个返回结果集的DB2函数,便于后期查阅 1.准备测试表 /*创建测试表:设置结果集的属性为表字段*/ CREATE TABLE Test_EXWAST ...

  2. Python经典编程题40题(二)

    Python经典编程题40题(二)    题目 给你一个list L, 如 L=[2,8,3,50], 对L进行降序排序并输出, 如样例L的结果为[50,8,3,2] 输入示例 输入:L = [4, ...

  3. rte-rtc

          活动内容 个人中心 立即报名    活动详情 RTE大会(原"RTC大会")创立于2015年,是亚太首个.迄今为止规模最大的实时互联网技术盛会,覆盖200+行业场景 ...

  4. Arduino Uno 引脚 –

    Arduino Uno 引脚 – Arduino Uno 板有 20 多个引脚,可用于许多不同的应用.在这篇文章中,我将为您提供 Arduino Uno 主要引脚的完整实用概述. 如果您刚开始使用 A ...

  5. PHP -pop魔术方法

    PHP魔术方法: PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利,在 PHP 中的作用是非常重要的.PHP 中的魔术方法通常以__(两个下划线)开始,可以在要使用时灵活调用. 例题 [ ...

  6. Android WebAPIOperator

    package com.example.myapplication2.models.CommonClasses; import org.json.JSONObject; import java.io. ...

  7. 前端JavaScript编码规范 和react编码规范

    JavaScript编码规范 点击链接查看:https://github.com/ecomfe/spec/blob/master/javascript-style-guide.md 前端React编码 ...

  8. JUC并发编程学习笔记(十二)Stream流式计算

    Stream流式计算 什么是Stream流式计算 大数据:存储+计算 集合.MySql这些的本质都是存储东西的: 计算都应该交给流来操作! 一个案例说明:函数式接口.lambda表达式.链式编程.St ...

  9. String 的 indexOf 与 search 方便的区别

    String 这个对象里面包含许多方法 今天只要讲 indexOf 与 search 1.indexOf stringObject.indexOf(searchvalue,fromindex) 2.s ...

  10. offscreenCanvas+worker+IndexedDB实现无感大量图片缓存

    一个有必要实现的需求 因为项目中需要使用canvasTexture(一个threejs3d引擎中的材质类型),绘制大量的图片,每次使用都会请求大量的oss图片资源,虽然重复请求会有磁盘缓存但毕竟这个磁 ...