一、複製的功能概述
SQL Server 複製功能實現了主從庫的讀寫分離,從而將主庫的壓力分解掉,主庫就主要負責資料的增刪改等,而從庫主要負責查詢。另外有了主、從庫,也給生產資料增加了一層安全性,即備份。萬一主庫出了什麼問題,從庫卻還在。
本文主要講述的是通過:釋出-訂閱的方式實現資料庫的主、從分離。因此需要配置一個釋出伺服器與一個訂閱伺服器。其中釋出伺服器負責將資料分佈到相應的訂閱伺服器上,而訂閱伺服器,則負責接收資料,並將資料整合、更新到自己庫上,從而保證其資料與主庫一樣。下面將自己配置釋出與訂閱的流程以及遇到的問題詳細記錄如下。
二、搭建前準備
2.1、硬體準備
釋出伺服器SKTSEV001: (PC1),資料庫服務名: SKTSEV001
訂閱伺服器SKTNB033: (PC2),資料庫服務名:SKTNB033
2.2、搭建前環境準備
準備工作1: 配置機器名和資料庫服庫名是否一致
先檢查PC1,PC2中的機器名和資料庫服務名是否一致,這個很重要!
1.檢查SQL Server 的伺服器名稱
use master go select @@servername select serverproperty('servername')
如果查出來的兩個名字不一樣,那就需要把他們的名字改成一樣的(如果是一樣的直接跳過此步驟)
if serverproperty('servername') <> @@servername begin declare @server sysname set @server = @@servername exec sp_dropserver @server = @server set @server = cast(serverproperty('servername') as sysname) exec sp_addserver @server = @server , @local = 'LOCAL' End
準備工作2:開啟PC1 與 PC2 的共享訪問
PC1:右下角工作列網路圖示右擊---點選“開啟網路和internet設定”--- “網路和共享中心”---“更改高階共享設定”---點選“啟用網路發現”“啟用檔案和印表機共享”---點選“確定”
PC2: 右下角工作列網路圖示右擊---點選“開啟網路和共享中心”---點選“更改高階共享設定”---點選“啟用網路發現”“啟用檔案和印表機共享”
準備工作3:防火牆開1433埠
PC1:右下角工作列網路圖示右擊---點選“開啟網咯和internet設定”---點選“WINDOWS防火牆”---確保“域網路”“專用網路”“公用網路”防火牆都有啟用---點選“高階設定”---點選左側“入站規則”—點選右側“新建規則”---點選“埠”---下一步---點選“TCP”,“特定本地埠”輸入“1433”---下一步---點選“允許連線”---下一步---勾選所有網路環境---下一步---“名稱”輸入“1433”---完成---此時在入站規則名稱下能夠看到1433
繼續操作---右擊“1433”---點選“屬性”---點選“協議和埠”標籤---將“協議型別”修改為“任何”---點選“確認”(經測試若不開啟所有協議,訂閱主機會查詢不到釋出主機)
PC2:右下角工作列網路圖示右擊---點選“開啟網路和共享中心”---點選“windows防火牆”---確保防火牆有啟用---點選“高階設定”---點選左側“入站規則”—點選右側“新建規則”---點選“埠”---下一步---點選“TCP”,“特定本地埠”輸入“1433”---下一步---點選“允許連線”---下一步---勾選所有網路環境---下一步---“名稱”輸入“1433”---完成---此時在入站規則名稱下能夠看到1433
繼續操作---右擊“1433”---點選“屬性”---點選“協議和埠”標籤---將“協議型別”修改為“任何”---點選“確認”
準備工作4:配置SQL ServerTCP/IP(PC1、PC2)
PC1: 在程式列表中開啟“SQL Server 2016配置管理器”---開啟“SQL server網路配置”---點選“SQL2016的協議”---右擊右側“TCP/IP”---點選“屬性”---點選“IP地址”---將所有TCP Port改為“1433”,在用IP地址的enable改為“是”
PC2:開始---所有程式---microsoft SQL server 2008---配置工具---SQLserver配置管理器---開啟“SQL server網路配置”---點選“SQL2016的協議”---右擊右側“TCP/IP”---點選“屬性”---點選“IP地址”---將所有TCP 埠改為“1433”,在用IP地址的已啟用改為“是”
準備工作5:Sql Server Browser 服務開啟(PC1、PC2)
如果在SSMS工具中找不到區域網內的其他資料庫伺服器,可以開啟這個功能
SQLserver配置管理器---開啟“SQL server服務”---右側右擊“SQL ServerBrowser”---啟動
準備工作6:驗證登陸使用者(PC1、PC2)
兩臺主機都有cdgl此使用者 且登陸密碼相同
在程式列表開啟“Microsoft SQL Server managerment studio+版本”---登陸本地資料---開啟“安全性”---右擊“登入名”---點選“新建登入名”---預設“windows身份驗證”---點選“搜尋”---輸入“cdgl”查詢(查詢結果為主機名+cdgl)---點選“確定”---點選“確定”
準備工作7:開啟資料庫遠端訪問(PC1、PC2)
在程式列表開啟“Microsoft SQL Server managerment studio+版本”---登陸本地資料---
右擊登陸資料庫“資料庫名”---點選“屬性”---點選“連線”---勾選“允許遠端連線到此伺服器”---點選“確定”
準備工作8:測試PC1、PC2能否互通(這裡要用伺服器名ping)
PC1: ping SKTNB033
telnet SKTNB033 1433
PC2: ping SKTSEV001
telnet SKTSEV001 1433
ping結果:
這裡一定要用伺服器名去ping,如果伺服器名ping不通後面就算訂閱成功了資料也過不去,解決辦法之一是配置host,找到 PC1伺服器檔案 c:\windows\system32\drivers\etc下的hosts檔案:(如果能ping的通則可忽略此步驟)
在最後一行填上PC2伺服器的ip 和主機名, 注意:ip和名字之間隔空格,這個ip可是是內網,也可以是公網
PC2配置同理:(如果伺服器名能ping的通則可忽略此步驟)
在PC2伺服器進行相同的操作主機上進行相同的新增host操作 ,將PC1伺服器的ip 和主機名 新增到PC2伺服器的hosts檔案下面.
三、建立釋出
使用sa賬戶登入PC1,開啟復制-本地釋出-點選“新建釋出”
點選下一步
注意:..\ ReplData這個資料夾是釋出所在的資料夾,要保持訪問許可權,當在c盤時,有時可能會出現無法訪問,我這裡一般會給ReplData這個資料夾加上everyone許可權
下一步:
選擇後,點選下一步:
下一步,篩選一般不管,如果對資料同步頻率要求比較高,則勾選“計劃在以下時間執行快照代理”點選更改:
下一步,點選安全設定:
點選“確定”---下一步---下一步---“釋出名稱”輸入“DB Back”---點選“完成”---等待建立釋出成功
四、本地訂閱
PC2(訂閱主機)用sa賬戶登陸本地資料庫---開啟“複製”---右擊“本地訂閱”---點選“新建訂閱”---開啟“釋出伺服器”下拉選單---點選“查詢sql server 釋出伺服器”
下一步---點選“在釋出伺服器PC1上執行所有代理”---下一步---開啟“訂閱資料庫下拉選單”---點選“新建資料庫”
“資料庫名稱”輸入“DBAdmin”(PC2與PC1資料庫名稱相同)---點選“確定”---點選“完成”---點選“完成”---等待建立訂閱
下一步,點選安全設定
下一步,點選完成即可,等待建立完成:
在PC1右擊複製-啟動複製編輯器-點選快照代理,如果訂閱沒有成功,或者資料沒能同步,可以在這裡看看日誌,查詢原因:
五、常見問題
1、 兩臺主機的 1433埠互相不通
2、SqlServer Agent 代理沒有開啟
3、 沒有配置 hosts 檔案中的ip和主機名對映
4、ReplData資料夾許可權不足
5、釋出訂閱前沒有進行完整備份
六、參考文獻(資料)
主要參考資料
- https://blog.csdn.net/u012861467/article/details/76411216
這篇文章說的是快照複製,但有許多細節、注意事項也是有提及到,對個人的幫助不少,點個贊 - http://blog.51cto.com/46562434/1156582
這篇文章說的是如何開啟 Windows Server 2008 r2 的網路發現的 - https://www.cnblogs.com/linyanyao/p/4513257.html
這篇文章說的是當SQL Server安裝後,計算機名稱被更改了,要如何才能確認是否被修改,以及如何才能解決修正
備用參考資料
- https://www.cnblogs.com/songafeng/p/3839955.html
這篇文章說的是同一區域網釋出不了其他釋出、訂閱的解決辦法。