超詳細!! sql server 同步資料庫 釋出 訂閱 跨網段 無公網ip 常見問題
問題描述
主機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這個這麼常見的功能為什麼如此多的坑。。。可能還是我太菜了。但起碼這個問題是解決了,我又成長了一點