一、復制的功能概述
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
這篇文章說的是同一局域網發布不了其他發布、訂閱的解決辦法。