码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Docker下的SqlServer发布订阅启用


    目录

    • 一、准备一个Docker的sqlserver
    •  二、配置分发服务器
      • 1、创建发布服务器存快照的文件夹
      • 2、错误的配置分发服务器做法
      •  3、正确配置分发服务器方法
    • 三、创建数据库发布
    • 四、创建数据库订阅

     


    回到顶部

    一、准备一个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查到的结果是一样的

     

     



     

    TRANSLATE with x
    English
    Arabic Hebrew Polish
    Bulgarian Hindi Portuguese
    Catalan Hmong Daw Romanian
    Chinese Simplified Hungarian Russian
    Chinese Traditional Indonesian Slovak
    Czech Italian Slovenian
    Danish Japanese Spanish
    Dutch Klingon Swedish
    English Korean Thai
    Estonian Latvian Turkish
    Finnish Lithuanian Ukrainian
    French Malay Urdu
    German Maltese Vietnamese
    Greek Norwegian Welsh
    Haitian Creole Persian  
     
    TRANSLATE with
    COPY THE URL BELOW
    Back
    EMBED THE SNIPPET BELOW IN YOUR SITE
    Enable collaborative features and customize widget: Bing Webmaster Portal
    Back
  • 相关阅读:
    集合框架----源码解读ArrayList篇
    知识图谱从入门到应用——知识图谱的存储与查询:基于关系数据库的知识图谱存储
    非零基础自学Java (老师:韩顺平) 第5章 程序控制结构 5.11 跳转控制语句 - break
    net基于asp.net的二手商品的交易系统-二手网站-计算机毕业设计
    c++题目:输入3个数,求最大值
    Monaco Editor教程(五): 实现同时多文件编辑,tab切换
    MATLAB数据导出
    【Java线程池】 java.util.concurrent.ThreadPoolExecutor 源码分析
    Win10 如何禁用BitLocker加密cmd命令
    键盘失灵按什么键恢复?详细方法分享!
  • 原文地址:https://www.cnblogs.com/wei325/p/17948345
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号