Docker下SqlServer发布订阅启用的方法
作者:chenggong007
一、准备一个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发布订阅启用的方法的文章就介绍到这了,更多相关Docker SqlServer发布订阅启用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!