WindowsServer--SQL Server搭建主从同步实现读写分离 - 事务性分发
十年河东,十年河西,莫欺少年穷
学无止境,精益求精
先决条件
主服务器也称之为分发服务器,从服务器称之为订阅服务器
下文皆按照主/从服务器称呼
主服务器和订阅服务器需在同一个内网网络内
主服务器和订阅服务器安装相同版本sqlserver,本例以sqlserver2014为范例进行
主服务器:172.27.40.27 | 主服务器 sqlserver2014 主机名:IZQY9C2TQSKGS9Z | 要求:同一个内网 |
从服务器:172.27.40.29 | 从服务器 sqlserver2014 主机名:iZ4evvi63blumaZ | 要求:同一个内网 |
数据库相关
数据库主机名
1)SQL Server数据库实例主机名需与本地服务器名称一致:
--本地服务器名称 SELECT @@SERVERNAME --数据库实例主机名 SELECT SERVERPROPERTY('ServerName')
2)若出现SQL Server数据库实例主机名与本地服务器名称不一致的情况,可通过以下语句来更改:
IF (SERVERPROPERTY('SERVERNAME')<>@@SERVERNAME) BEGIN DECLARE @SERVER SYSNAME SET @SERVER=@@SERVERNAME EXEC SP_DROPSERVER @SERVER=@SERVER SET @SERVER=CAST(SERVERPROPERTY('SERVERNAME') AS SYSNAME) EXEC SP_ADDSERVER @SERVER=@SERVER,@LOCAL='LOCAL' END
更改完成后请重启SQL Server服务:
建立复制账户,测试连通性
所有发布订阅机器都建立该登录名和密码;给予了系统管理员权限;
USE [master]
GO
CREATE LOGIN [repl] WITH PASSWORD=N'a123456!'
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [repl]
GO
启动sqlserver代理账户,登录身份设置为LocalSytem
配置hosts文件
文件路径:C:\Windows\System32\drivers\etc
主服务器配置如下:
从服务器配置如下:
主服务器配置共享目录
在D盘或其他盘配置共享目录,需要说明的是最好不要配置到系统C盘,防止C盘无限扩大,影响系统运行
在D盘新建文件夹DBShare,在DBShare文件夹中新建子文件夹DbPublish,并设置为共享文件夹,具体步骤如下:
设置安全性,
给Everyone 完全控制权限,如果默认组或用户名中没有Everyone,则通过编辑->添加->高级->查找,找到Everyone,并赋予权限
设置为共享目录,
设置为共享目录,供从服务器访问
属性中,共享,选择Everyone
主从服务器均需要在防火墙配置出入站1433端口
以上先决条件准备好后,则开启配置
主服务器配置分发
点击:复制,配置分发
这里面需要注意,如果之前配置过分发,当你点击复制时,不会再弹出配置分发对话框,你需要删除之前配置的分发,然后重新点击复制,重新配置即可
下一步
再下一步
配置快照文件夹,也就值之前共享的DBShare文件夹,如下
快照文件夹的路径需修改为箭头所指的网络路径,如下:
再下一步
配置分发数据文件及日志文件夹路径
这里文件夹路径请填写共享目录DBShare的子目录DBPublish
再下一步
再下一步
点击完成
待成功后退出。
本地发布->新建发布
选择要发布的数据库
点击下一步
选择事务发布
点击下一步
选择所有表/存储过程/视图等
点击下一步
不做筛选
点击下一步
选中箭头所指处
点击下一步
点击安全设置
选择使用以下sqlserber登录名,也就是先决条件中创建的账户
确定后,点击下一步
创建发布,点击下一步
起个名字,点击完成
点击完成后
】
主服务器配置基本完成。下面开始进行从服务器配置
从服务器订阅
新建订阅,弹出框后点击下一步
点击查账sqlserver发布服务器
选择发布
点击下一步
点击下一步
选择订阅数据库,
点击下一步
分发代理安全性设置
确定后,下一步,选择连续运行
点击下一步
选择立即,
点击下一步
点击下一步
成功后退出,查看数据库ChargeDB中是否将主服务器表数据同步成功
同步成功。
需要注意的是:从库不能新增修改删除,只能用于查询,切记
以上over
核验与监视
如果随着项目的进行,修正了一张表,如果加入发布队列中呢?
点击发布-属性
将仅显示列表中已选项目对钩去掉,选择新添加的test表
点击确定,十秒钟后,我们去从服务器,发现新增的表并未同步过来
我们还需要如下操作
复制监视器
选中快照代理,右键已完成的这条记录
启动代理
此时就会将数据表及数据同步过去。
修改表结构测试如下:
主从修改表结构,并插入一条数据:
alter table test add adds varchar(20) insert into test values(3,'xx','ttt')
去从库查看,发现已经被同步过来了
删除表测试:
因此,我们需要先去掉对test表的同步,然后手动在主从库删除表即可。