SQL Server搭建主從同步實現讀寫分離


一、概念簡介

1.1、基本概念

1)讀寫分離概念:是把對數據庫的讀操作和寫操作分離開。在一定程度上,讀寫分離可以緩解讀寫操作並發時產生鎖的問題。

2)讀寫分離原理:是讓主數據庫處理事務性增、刪、改操作(INSERT、DELETE、UPDATE),而從數據庫處理查詢操作(SELECT)。

1.2、技術簡介

 SQL Server提供了三種技術來實現讀寫分離,分別是:日志傳送、事務復制、Always On。以下是三種技術的比較:

  日志傳送 事務復制 Always On
原理

通過SQL Server Agent調度作業進行日志

的備份、復制、還原實現同步

由復制代理同步發布數據上的

增刪改操作到訂閱服務器

主數據庫的事務日志記錄發送並

運用到每個輔助數據庫

版本功能支持

SQL Server 2000 企業版

SQL Server 2005 及以后標准版、企業版

標准版、企業版 SQL Server 2012 企業版
操作系統要求 無限制 無限制

Windows 企業版

故障轉移群集

限制 要求數據庫必須是完整恢復模式 要求表必須有主鍵 要求數據庫必須是完整恢復模式
同步粒度 數據庫級 表級 數據庫級
數據差異 取決於備份、復制、還原的作業設置 幾秒 幾秒
副本數量 無限制 無限制 4個
副本讀取 間歇性,在還原時會中斷查詢。 正常 正常
自動故障轉移 不支持 不支持 支持

事務復制沒有Always On的要求那么高,只需要主從服務器能通過TCP進行通訊即可,主從服務器操作系統和SQL Server版本可以不完全一致(生產環境建議一致),同時,主從服務器也不需要加入域。

注:本文主從同步實現方式采用事務復制方式。

二、實戰准備

2.1、網絡環境

1)主從服務器最好在同一個局域網內,而且要互相ping得通,可以是不同網段。

2)以下是本文的測試環境:

  計算機名 IP地址 操作系統 數據庫
主服務器 IT01 192.168.2.174 Windows 10 SQL Server 2016
從服務器 HW01 192.168.2.242 Windows Server 2012 SQL Server 2016

2.2、數據庫主機名

1)SQL Server數據庫實例主機名需與本地服務器名稱一致:

--本地服務器名稱
SELECT @@SERVERNAME
--數據庫實例主機名
SELECT SERVERPROPERTY('ServerName')

2)若出現SQL Server數據庫實例主機名與本地服務器名稱不一致的情況,可通過以下語句來更改:

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

更改完成后請重啟SQL Server服務:

2.3、同步賬號

主從服務器都需要建立一個賬號及密碼都相同的本地管理員用戶如sync:

2.4、SQL Server 代理

主從服務器都需要啟動SQL Server代理,另外登錄賬號都設為同步賬號如sync:

2.5、同步說明

1)以數據庫AdventureWorks為例。

2)在AdventureWorks上執行以下SQL語句,否則后續會出現【進程無法在“IT01”上執行“sp_replcmds”】報錯。 

sys.sp_changedbowner 'sa'

3)主從搭建,實際是發布->分發->訂閱的過程。本文發布與分發使用的是同一台服務器IT01。

2.6、同步規則

1)新增的表一定要有主鍵,否則不能進行同步。

2)從庫上一定不能有任何的數據修改,這個原則一定要遵守。

三、實戰操作

3.1、分發配置

1)在IT01主服務器上,對着SQL Server的"復制"右鍵->點擊"配置分發"。

2)點擊"下一步"。

3)默認選擇,點擊"下一步"。

4)快照文件夾應使用網絡路徑,因此要先設置文件夾共享。

5)打開"D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL"->對着"repldata"文件夾"右鍵"->點擊"屬性"。

6)選擇"共享"頁簽->點擊"共享"。

7)添加"Everyone"用戶。

8)授予"Everyone"用戶"讀取/寫入"權限->點擊"共享"。

9)共享成功后,在快照文件夾中輸入網絡路徑"\\IT01\ReplData",點擊"下一步"。

10)默認選擇,點擊"下一步"。

11)默認選擇,點擊"下一步"。

12)默認選擇,點擊"下一步"。

13)點擊"完成"。

14)完成后,點擊"關閉"即可。

3.2、發布配置

1)在IT01主服務器上,點擊SQL Server的"復制"->對着"本地發布"右鍵->點擊"新建發布"。

2)點擊"下一步"。

3)選擇要發布的數據庫如"AdventureWorks"->點擊"下一步"。

4)選擇"事務發布"->點擊"下一步"。

5)選擇要發布的對象如"表"(也可以選擇某個具體表)->點擊"下一步"。 

6)默認選擇,點擊"下一步"。

7)勾選"立即創建快照並使快照保持可用狀態,以初始化訂閱"->點擊"下一步"。

8)點擊"安全設置"。

9)由於本測試環境為非域環境,因此只能選擇"在 SQL Server 代理服務賬號下運行"。同時,錄入SQL Server登錄名及密碼,點擊"確定"。

10)點擊"下一步"。

11)默認選擇,點擊"下一步"。

12)起個發布名稱,點擊"完成"。

13)執行成功后,點擊"關閉"即可。

14)對着發布名稱"右鍵"->點擊"屬性"。

15)點擊"快照"->取消勾選"將文件放入默認文件夾",勾選"將文件放入下列文件夾",並錄入網絡地址"\\IT01\ReplData"->點擊"確定"。

3.3、訂閱配置

1)在HW01從服務器上打開運行->輸入"\\IT01"。

2)確保能正常訪問主服務上的共享文件夾"repldata"。

3)對着數據庫"右鍵"->選擇"新建數據庫"。

4)輸入數據庫名如"AdventureWorks"->點擊"確定"。

5)打開"復制",對着本地訂閱"右鍵"->點擊"新建訂閱"。

6)默認選擇,點擊"下一步"。

7)在下拉框中選擇"查找 SQL Server 發布服務器..."。

8)輸入主服務器名稱及身份驗證,同時勾選"記住密碼",最后點擊"連接"。

9)默認選擇,點擊"下一步"。

10)選擇"在其訂閱服務器上運行每個代理(請求訂閱)"->點擊"下一步"。

11)選擇訂閱數據庫"AdventureWorks"->點擊"下一步"。

12)點擊"..." 。

13)選擇"在 SQL Server 代理服務賬戶下運行"->輸入連接到分發服務器的登錄賬號及密碼->點擊"確定"。

14)點擊"下一步"。

15)選擇"連續運行"->點擊"下一步"。

16)初始化時間選擇"立即"->點擊"下一步"。

17)默認選擇,點擊"下一步"。

18)點擊完成。

19)創建成功后,點擊"關閉"。

20)對着訂閱名稱"右鍵"->點擊"屬性"。

 22)在快照項中,快照位置選擇"備份文件夾"->快照文件夾輸入"\\IT01\repldata"->點擊"確定"。

四、異常檢查

1)對着發布名稱"右鍵"->點擊"啟動復制監視器"。

2)記錄行"右鍵",可以"停止代理"再"啟動代理",這樣就可以發現執行過程中的報錯。也可以點擊"查看詳細信息",查看執行的過程日志等。

五、新增項目內容

1)假如有新的表或其它新的項目內容需要同步,可以對着發布名稱"右鍵"->點擊"屬性"。

2)選擇"項目"->勾選新增的表等項目內容->點擊"確定"。

3)對着發布名稱"右鍵"->點擊"查看快照代理狀態"。

4)點擊"啟動"。

六、刪除發布服務器上的主從復制

1)先刪除發布服務器上的訂閱和發布。

2)執行以下命令,刪除distribution分發數據庫。

USE master
GO
EXEC sp_dropdistributiondb @database=N'distribution'
GO
EXEC sp_dropdistributor @no_checks=1,@ignore_distributor=1
GO

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM