问题描述
主机1:发布端
阿里云服务器--有公网ip
主机2:订阅端
笔记本--无公网ip
数据量很小,主要是熟悉发布订阅的操作流程。
主机2仅仅作为主机1的本地备份,要求修改云服务器上数据后,能通过sql server的发布订阅功能将本地数据同步。
底下没有一步一步介绍,一步一步的,可以看下面这篇
问题1
阿里云的sql server配置好后,无法使用本地sql server客户端远程登录。
检查以下几点
1.要在阿里云的控制台中的防火墙,打开阿里云的1433端口(默认的sql server访问端口)
这点很重要,好多教程里没有提到!!!
2.要把两台主机的sql manager中的sql server服务中的sql server代理打开(原本是禁用状态)
3.远端服务器要开启sql server用户名密码登录方式,并且设置好代理账号和密码
到这一步,应该可以在笔记本的sql server通过ip地址,和刚刚设置的代理账户和密码登录进云服务器了。
--------------------------------------------------------------------------------------
问题2
发布和订阅流程
要首先在云端sql server客户端的
复制---发布---新建发布
1.选择哪种发布方式
这点可以自己查询四种发布的区别
要注意:事务发布时,被发布的表要有主键
2.如何连接发布端
网上一般推荐是在云端和本地端都新建一个用户名,密码一样的windows账户,然后这里选择在windows账户下运行。
我这里使用sql server登录名
这里注意---登录名是sql server的登录名(就是一般是sa的那个)
-------------------------
以上是发布端
-------------------------
订阅端
1.使用别名
在这一步选择发布服务器时,要使用实际的服务器名称(使用windows方式登录时的名称),不能使用ip地址。
这里要在订阅服务器中添加发布服务器的别名,具体操作看下面
https://blog.csdn.net/u010457730/article/details/97276313
2.推送订阅还是请求订阅
这里我有个不懂的问题,之后会讲到。
3.连接到分发服务器
这里注意,要填写分发服务器的sql server登录名。
是登录名,sa那个
登录名不是服务器名,这点切记。
到这一步时,查看一下订阅服务器的同步状态
看看是否打钩了----这代表前面的设置正确,订阅服务器能访问到发布端。
本人一开始因为设置时填写错了用户名,在查看同步状态这里还是报错的。
--------------------------------------------------------------------------------
接下来,可以看看订阅服务器的数据是不是被同步了,如未同步,看看订阅端的作业历史记录
有可能还是报错
但是这个报错信息是什么玩意嘛???
“复制代理遇到问题。有关详细信息,请参阅上一个作业步骤历史记录消息或复制监视器”
原来要在发布端找具体错误信息。。。
启动发布端的复制监视器
在左侧选好具体的发布后,双击右侧中所有订阅中的错误的订阅,查看具体报错
真相大白--
由于出现操作系统错误 3,进程无法读取文件D:\\XXXX\\X.pre
原因原来是--这个路径是发布端存放快照文件的位置,但是由于不是网络文件夹,不能被访问。
这里提供一种简单的解决办法
参照这位的做法
https://www.cnblogs.com/mrray/archive/2011/03/17/1987123.html
直接把发布端的快照文件夹--名称为repldata的拷贝到订阅端的某个文件位置
再在订阅端修改快照位置
复制--本地订阅---具体的订阅---右键---属性
把快照文件夹位置修改为本地的那个位置。
很神奇的是,只需要修改一次就好。
到这一步,我的问题就解决了,以下是几点问题和思考
1.坑很多,但多查询相关资料,总是能够解决的。这个信心是一次次解决问题中锻炼出来的。
2.自身理论基础欠缺时,一些配置性操作就容易出问题。比如说不了解发布订阅的具体机制,就很难想到出现快照文件夹无法访问这个问题。
3.我的情景比较特殊,一台有公网ip,一台没有。我在网上看到的情况,一般要么是局域网,要么两台主机都是有公网ip的(这意味着发布端,订阅端都能用唯一的ip地址访问对方)。所以我一直怀疑我这种网络结构从原理上就不能使用发布订阅这种方式(因为发布端无法“找到”订阅端)。这也是我在配置中选择了从订阅端运行代理,因为订阅端是肯定能“找到”有公网ip的发布端的。这个问题还要细研究。
4.这四种发布-订阅的方式有什么区别?快照文件夹是什么原理?这是两个需要搞清楚的问题。
5.sql server这个这么常见的功能为什么如此多的坑。。。可能还是我太菜了。但起码这个问题是解决了,我又成长了一点点。
閱讀更多 JAVA柯尼塞克丶 的文章