小白入門——SQLServer證書配置鏡像

準備:

1. 一個主機,兩個虛擬機

2. 安裝相同版本的SQL Server(2016及以上,Standard或Enterprise)>參考

3. 防火牆開放端口5022

一、數據庫備份和還原

--主體:設置“完整恢復模式”
USE master;
ALTER DATABASE [DBName] SET RECOVERY FULL  
GO
 
--主體:備份數據庫 
USE master;
BACKUP DATABASE [DBName]
   TO DISK='G:\SQLServer\BACKUP\DBName.bak'   
   WITH INIT,FORMAT;  
GO  
 
--鏡像:還原數據庫(NORECOVERY)
--若主體數據庫與鏡像數據庫路徑一致
RESTORE DATABASE DBName   
    FROM DISK = 'C:\DBName.bak'   
    WITH NORECOVERY  
GO
--若不一致
RESTORE DATABASE [DBName]
   FROM DISK='C:\DBName.bak'  
   WITH NORECOVERY,   
      MOVE 'DBName_Data' TO   
         'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\DBName_Data.mdf',   
      MOVE 'DBName_Log' TO  
         'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\DBName_Log.ldf';  
GO

主體與鏡像數據庫路徑不一致時,建議先使用命令行查詢實際的邏輯名稱(LogicalName):

RESTORE FILELISTONLY FROM DISK='C:\DBName.bak' 

比如我的數據庫數據邏輯名是DBName而非DBName_Data,日誌的邏輯名是DBName_log而不是DBName_Log

二、創建證書並交換

/*主體 HOST_A*/
--創建數據庫主密鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1_Strong_Password!>';  
GO
--創建證書
USE master;  
CREATE CERTIFICATE HOST_A_cert   
WITH SUBJECT = 'HOST_A certificate for database mirroring',   
EXPIRY_DATE = '12/31/2020';  
GO
--備份證書
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\HOST_A_cert.cer';  
GO   


/*鏡像 HOST_B*/
--創建數據庫主密鑰(可選)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#2>';  
GO  
--創建證書
CREATE CERTIFICATE HOST_B_cert   
   WITH SUBJECT = 'HOST_B certificate for database mirroring',   
   EXPIRY_DATE = '12/31/2020';  
GO  
--備份證書
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'C:\HOST_B_cert.cer';  
GO   


/*見證 HOST_C*/
--創建證書
CREATE CERTIFICATE HOST_C_cert   
   WITH SUBJECT = 'HOST_C certificate for database witness',   
   EXPIRY_DATE = '12/31/2020';  
GO  
--備份證書
BACKUP CERTIFICATE HOST_C_cert TO FILE = 'C:\HOST_C_cert.cer';  
GO   


/*交換證書:相互拷貝證書*/

三、創建數據庫鏡像端點(用於出站連接)

/*主體*/
USE master;
CREATE ENDPOINT Endpoint_Mirroring  
   STATE = STARTED  
   AS TCP (  
      LISTENER_PORT=5022
      , LISTENER_IP = ALL  
   )   
   FOR DATABASE_MIRRORING (   
      AUTHENTICATION = CERTIFICATE HOST_A_cert  
      , ENCRYPTION = REQUIRED ALGORITHM AES  
      , ROLE = ALL  
   );  
GO

/*鏡像*/
USE master;
CREATE ENDPOINT Endpoint_Mirroring  
   STATE = STARTED  
   AS TCP (  
      LISTENER_PORT=5022
      , LISTENER_IP = ALL  
   )   
   FOR DATABASE_MIRRORING (   
      AUTHENTICATION = CERTIFICATE HOST_B_cert  
      , ENCRYPTION = REQUIRED ALGORITHM AES  
      , ROLE = ALL  
   );  
GO

/*見證*/
USE master;
CREATE ENDPOINT Endpoint_Mirroring  
   STATE = STARTED  
   AS TCP (  
      LISTENER_PORT=5022
      , LISTENER_IP = ALL  
   )   
   FOR DATABASE_MIRRORING (   
      AUTHENTICATION = CERTIFICATE HOST_C_cert  
      , ENCRYPTION = REQUIRED ALGORITHM AES  
      , ROLE = WITNESS  
   );  
GO

四、還原證書(用於入站連接)

/* 主體 */
USE master;
--1.爲HOST_B/HOST_C創建登錄名
CREATE LOGIN Mirror_login   
   WITH PASSWORD = '1Sample_Strong_Password!@#';  
GO
--2.創建一個使用該登錄名的用戶
USE master;  
CREATE USER Mirror_user FOR LOGIN Mirror_login;  
GO
--3.將HOST_B的證書與它在HOST_A上的用戶關聯
CREATE CERTIFICATE HOST_B_cert
AUTHORIZATION Mirror_user 
FROM FILE = 'C:\HOST_B_cert.cer';  
GO
--3.將HOST_C的證書與它在HOST_A上的用戶關聯  
CREATE CERTIFICATE HOST_C_cert 
AUTHORIZATION Mirror_user 
FROM FILE = 'C:\HOST_C_cert.cer';  
GO  

/* 鏡像 */
--TODO:創建登錄名及用戶
USE master;  
CREATE CERTIFICATE HOST_A_cert  
AUTHORIZATION Mirror_user 
FROM FILE = 'C:\HOST_A_cert.cer';  
GO   
CREATE CERTIFICATE HOST_C_cert  
AUTHORIZATION Mirror_user 
FROM FILE = 'C:\HOST_C_cert.cer';  
GO  

/* 見證 */
--TODO:創建登錄名及用戶
USE master;
CREATE CERTIFICATE HOST_A_cert  
AUTHORIZATION Mirror_user 
FROM FILE = 'C:\HOST_A_cert.cer';  
GO   
CREATE CERTIFICATE HOST_B_cert  
AUTHORIZATION Mirror_user 
FROM FILE = 'C:\HOST_B_cert.cer';  
GO   

 

五、開始鏡像

/*鏡像*/
USE master  
GO  
ALTER DATABASE [DBName] SET PARTNER = 'TCP://192.168.16.218:5022';  --配置主體服務器
GO  

/*主體*/
USE master  
GO  
ALTER DATABASE [DBName] SET PARTNER = 'TCP://192.168.16.159:5022';  --配置鏡像服務器
GO  
ALTER DATABASE [DBName] SET PARTNER = 'TCP://192.168.16.153:5022';  --配置見證服務器
GO  

--注意:先配置鏡像的PARTNER,再配置主體的

 

問題

在配置過程中,由於誤操作比較多,導致遇到LSN過早的問題,如果在當前業務中日誌不是很重要,可以先把日誌清空再進行備份和還原操作

/*主體*/
--清除日誌
USE [master]
GO
ALTER DATABASE DBName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DBName SET RECOVERY SIMPLE   --簡單模式
GO
USE MirrorDemo
GO
DBCC SHRINKFILE (N'DBName_log' , 2, TRUNCATEONLY)  --設置壓縮後的日誌大小爲2M,可以自行指定
GO
USE [master]
GO
ALTER DATABASE DBName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DBName SET RECOVERY FULL  --還原爲完全模式
GO
--備份日誌:參照第一步

/*鏡像*/
--還原日誌:參照第一步

附兩個鏡像配置教程以供參考:

發佈了23 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章