换了新公司之后没有DBA去管理数据库,一切都得自己动手。近来公司有不同服务器之间数据交互的需求,了解了一下Sqlserver自带的订阅和发布功能,捣鼓了半天,记录一下捣鼓的内容,也是不太懂原理
准备了两台百度云服务器做测试。
- 服务器A:安装了Sqlserver 2012
- 服务器B:安装了Sqlserver 2019
1.登录百度云服务器管理后台,防火墙添加端口(sqlserver默认端口是1433,没有手动修改就是这个)
2.登录服务器设置防火墙端口(同样是添加1433端口)
3.看一下这些协议有没有开,把他们通通都启动,Sql server服务也需要启动(我是一股脑把这里看到的服务都启动了)
4.需要修改一下hosts文件(C:\Windows\System32\drivers\etc),需要在最下面加上IP和主机名,A服务器加的是B服务器的IP和主机名,B服务器加的是A服务器的IP和主机名(我加的是公网IP,AB服务器的IP和主机名我都加上去了,IP和主机名之间需要有空格)
5.两台服务器的数据库都新建一个账号和测试库,这个账号对测试库需要要owner权限
几番曲折,前期工作准备得差不多了(最好是在A服务的命令行ping一下B服务器的ip和主机名(修改了hosts的话,用ip能ping通的话,ping主机名应该也是可以通的)做了上面的还不一定就能保证能同步成功,痛苦)
然后开始在A服务器建立发布
6.右键新建发布,然后选择发布数据库
选择发布类型(这里选了事务发布。貌似事务发布不用做其他设置,发布成功了后修改,数据就会很快过去?快照发布的话还需要设置频率)
选择发布的表
下一步筛选条件跳过
再下一步,选择立即运行
再下一步,这里有点麻烦,我捣鼓了很久
这里最好选择在windows账户下运行,并用管理员账号,不然后续读某些文件夹没有权限,一开始又不知道咋整(这里的域\账号一般是主机名\账号),连接到发布服务器,账号就是在第5步准备得数据库账号
再下下一步,发布名称随便起名字
然后就成功了
成功后会生成对应的计划,可以右键发布项目"启动复制监视器"查看运行情况,也可以看看对应计划的历史记录是否有问题
7.B服务器建立订阅
右键本地订阅新建,一直下一步之后需要选择发布服务器(A服务器),这里需要填主机名,直接填IP还确定不了,所以需要有做第4步,不然无法通过主机名找到A服务器,而且这里最好是用sqlserver身份认证,这里貌似是有跨服务器读写文件夹的操作,如果用windows认证的话,代理跑订阅的时候会发生报错,说xxx没权限(这里我试一下用windows认证,看看能否把报错给弄出来看一看)
下一步,先尝试用推送订阅
然后添加订阅服务器和数据库
然后这里,同样建议用windows管理员账号
然后就成功了(第一次做的时候是有问题的,这一次重复做记录的时候就没问题了,害)
因为刚才选的时候推送订阅,所以在订阅服务器B上面是看不到订阅的信息的,需要回到A服务器看订阅的情况(发布和订阅都在A服务器做管理)
没想到这一下子就成功了,没能把之前的报错重现
-
报错一:没有xxx文件夹权限
这个貌似一般发生在请求订阅的时候,请求订阅会在B服务器管理,需要访问A服务的某快照文件夹,这时候一般是没有权限的,要更换快照文件夹,可以把A服务的文件夹复制到B服务器,也可以在A服务器建立新的文件夹,然后进行共享,让B服务器有权限访问
- 报错二:进程无法连接到 Subscriber xxx
这个报错我是发生在推送订阅的时候,之前有提到过,如果在建立订阅的时候,B服务连A服务器用windows身份的话,很可能就会出现这个问题,这个我搞了半天,最后是修改了下图这里才能正常同步(下图右键订阅项目选择属性,订阅服务器连接要用Sql Server身份验证,用windows身份验证的时候很可能会出现进程无法连接到xxx的情况)