在实际应用项目开发中,应用数据基本上都存储在数据库中,针对数据库的操作有增删改查操作。
有时为了解决并发大数据访问问题,我们需要使用数据库读写分离,主库用来实现应用数据的增删改操作,而从数据库主要用来进行查询操作。
接下来我们将利用SQL Server 2012进行主从数据库的订阅和发布,实现数据库读写分离操作。
SQL SERVER 发布订阅注意
发布和订阅服务器都要创建相同的帐户(用户名和密码一致),其次service-sqlserver代理必须使用这个相同的帐号和密码,否则会发生无权限读取发布服务器的快照错误。
发布和订阅,本质就是主-从模式,写入和读取分离,架构DB的基础。
一、 准备工作:
打开SQL Server 2012,创建一个数据库BaiInfoBase;
确保Windows服务中SQL Server代理服务是开启的,并且启动模式是自动的,如下图所示:
二、 配置本地发布
1. 右键SQL Server Management Studio根节点下的“复制”->“本地发布”,选择“新建发布”,如下图所示:
2. 右键-新建发布向导-下一步
3. 选择SQL代理为自动启动,需要完成前边的准备工作:
4. 配置好共享文件夹和访问用户名密码,以供生成、读取快照使用:
5. 选择发布的主数据库BaiInfoBase:
6. 选择事务发布:
7. 勾选要发布的表、存储过程或整库,然后下一步:
8. 下一步,选择立即创建快照,下一步:
9. 点击“快照代理”的“安全设置”,选择SQL代理帐户运行和SQL名称登录,确定:
10. 然后一路下一步,立即创建完成,成功后应如下图,若有报错按提示处理:
三、 配置本地订阅
1. 在订阅服务器下-新建订阅:
2. 选择查找SQL发布服务器,在弹出窗口输入SQL帐户和密码,选择BaiInfoBase库:
3. 选择分发类型,下一步:
4. 配置订阅时的安全性帐户和密码,这里一点要输订阅服务器本身的帐户和密码:
5. 一路下一步,立即订阅,完成,如下图:
四、 发布/订阅的检查、排错和快照初始化:
1.快照初始化:
有时候发现数据不同步或同步有故障时,需要手动重新生成新的快照同步,这时就需要如下操作:
SSMS中找到复制-右键-启动复制监视器:
选中要重新生成快照的发布项目,这里右键后有2种生成快照的方式,如下图:
推荐第1种, 1是完全初始化订阅库重新同步数据,2是单纯只生成新快照。
选择”重新初始化所有订阅”后, 选择”使用新快照”并勾选”立即生成新快照”, 点击”标记为要重新初始化”按钮, 开始初始化快照:
此时点开”代理”标签页, 应该能看到生成快照的完成度百分比, 等待它100%时表示快照生成完毕.
2.发布/订阅的检查:
再点开”所有订阅”双击当前订阅, 弹出详细的发布/订阅项目记录, 在这里可以很清晰的看到所有的同步记录, 仔细查看有没有错误:
1)“分发服务器到订阅服务器的历史记录”: 可以查看传递过去多少表和记录等.
2)“发布服务器到分发服务器的历史记录”: 查看发布服务器生成快递和日志错误.
3)“未分发的命令”: 查看当前还有多少条事务没有同步到订阅服务器上.
4) 使用”跟踪令牌”查看发布/订阅库的实际延迟:
5) 确认发布/订阅中数据库的所有表的发布状态:
有时候创建好发布/订阅, 有的表缺少一些属性会导致发布自动过滤掉一些表, 所以每当创建好新的发布/订阅后, 我们都应该再确认一次数据库中所有表都正常发布出去了.
确认方式如下, 打开-ssms实例-复制-发布项目-右键-属性:
找到项目-表, 这里一点要双击展开, 因为有时是折叠的, 不展开看不到未正常发布的表, 如下:
以后有新加表或存储过程等, 也可以来这里勾选上增加发布的新表, 然后重新初始化生成快照.
6)生产日常使用中经常会创建新表, 新表是不会自动发布的, 需要手动勾选再重新生成快照, 如下:
勾选新表确定发布, 然后去生成新快照:
以上二种操作方式生成快照都可以.
3. 一些常见的错误排查:
1) 权限不足:
解决方法:
USE [数据库名]
GO
sp_changedbowner 'sa'
- 完成