docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker SqlServer发布订阅启用

Docker下SqlServer发布订阅启用的方法

作者:chenggong007

发布订阅主要用来做数据库的读写分离,当单台数据库的压力太大时,可以考虑这种方案,本文主要介绍了Docker下SqlServer发布订阅启用的方法,具有一定的参考价值,感兴趣的可以了解一下

一、准备一个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能连上了

Docker下的SqlServer发布订阅启用_数据库

 二、配置分发服务器

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

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

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

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

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

Docker下的SqlServer发布订阅启用_服务器_02

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

Docker下的SqlServer发布订阅启用_数据库_03

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

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

select @@servername

Docker下的SqlServer发布订阅启用_sql_04

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:这个路径为上面创建的路径

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

Docker下的SqlServer发布订阅启用_sql_05

 三、建数据库发布

1、准备数据库

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

CREATE TABLE SysUser (
    ID INT PRIMARY KEY,
    UserName NVARCHAR(50),
    Age INT
);

Docker下的SqlServer发布订阅启用_sql_06

2、新建发布

Docker下的SqlServer发布订阅启用_服务器_07

Docker下的SqlServer发布订阅启用_数据库_08

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

Docker下的SqlServer发布订阅启用_数据库_09

全部勾选

Docker下的SqlServer发布订阅启用_服务器_10

Docker下的SqlServer发布订阅启用_服务器_11

Docker下的SqlServer发布订阅启用_sql_12

Docker下的SqlServer发布订阅启用_sql_13

Docker下的SqlServer发布订阅启用_数据库_14

Docker下的SqlServer发布订阅启用_sql_15

Docker下的SqlServer发布订阅启用_服务器_16

成功创建发布

Docker下的SqlServer发布订阅启用_sql_17

四、创建数据库订阅

1、创建订阅

Docker下的SqlServer发布订阅启用_sql_18

Docker下的SqlServer发布订阅启用_服务器_19

Docker下的SqlServer发布订阅启用_sql_20

Docker下的SqlServer发布订阅启用_数据库_21

Docker下的SqlServer发布订阅启用_sql_22

Docker下的SqlServer发布订阅启用_服务器_23

Docker下的SqlServer发布订阅启用_数据库_24

创建订阅成功

Docker下的SqlServer发布订阅启用_数据库_25

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

Docker下的SqlServer发布订阅启用_服务器_26

2、验证效果

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

Docker下的SqlServer发布订阅启用_sql_27

到此这篇关于Docker下SqlServer发布订阅启用的方法的文章就介绍到这了,更多相关Docker SqlServer发布订阅启用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文