問題描述
主機1:發布端
阿里雲服務器--有公網ip
主機2:訂閱端
筆記本--無公網ip
數據量很小,主要是熟悉發布訂閱的操作流程。
主機2僅僅作為主機1的本地備份,要求修改雲服務器上數據后,能通過sql server的發布訂閱功能將本地數據同步。
底下沒有一步一步介紹,一步一步的,可以看下面這篇
https://blog.csdn.net/u012861467/article/details/76411216
----------------------------------------------------------------------------------------------
問題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這個這么常見的功能為什么如此多的坑。。。可能還是我太菜了。但起碼這個問題是解決了,我又成長了一點點。
