SQL Server非域(跨域)環境下鏡像(Mirror)的搭建步驟及注意事項


在實際的生產環境下,我們經常需要跨域進行數據備份,而創建Mirror是其中一個方案。但跨域創建Mirror要相對復雜的多,需要借助證書進行搭建。

下面我們將具體的步驟總結如下:

第一部分 創建證書

Step 1:創建數據庫主密鑰

主密鑰的用處在這里是用於加密證書,當然主密鑰不僅僅只有這個作用。對數據庫主密鑰的密碼及存儲保護要小心,這是實力級別的對象,影響面非常廣。可以使用下面語句來創建:

USE master  

GO  

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$w0rd';

通過系統表查看,確認

select top 100 is_master_key_encrypted_by_server,*  from sys.databases

 

使用相同方式在鏡像服務器創建數據庫主密鑰。

Step 2:創建證書,並用主密鑰加密

 創建證書時,默認在創建日期開始一年后過期,所以針對證書的創建,要注意其過期時間。下面是在“主體服務器”上創建HOST_P_cert證書的創建

USE master  

GO  

CREATE CERTIFICATE Host_A_Cert   

WITH Subject = 'Host_P Certificate',  

Expiry_Date = '2050-1-1'; --過期日期

使用相同的方法在鏡像服務器上實現對HOST_S_cert證書的創建

Step 3:創建端點

可以使用下面的代碼在主體服務器中創建端點,並且指定使用5022,端口,端口在鏡像配置過程中不強制使用特定端口(被占用或者特定端口如1433除外)。

--使用Host_A_Cert證書創建端點  

IF NOT EXISTS ( SELECT  1  

                FROM    sys.database_mirroring_endpoints )  

    BEGIN  

        CREATE ENDPOINT [DatabaseMirroring] STATE = STARTED AS TCP ( LISTENER_PORT = 5022,  

            LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION =  

            CERTIFICATE Host_A_Cert, ENCRYPTION = REQUIRED Algorithm AES, ROLE =  

            ALL );  

    END 

在鏡像服務器對證書名稍作修改,創建鏡像服務器的端點。

Step 4:備份證書

備份證書的目的是發送到別的服務器並導入證書,以便別的服務器能通過證書訪問這台服務器(主體服務器)。

BACKUP CERTIFICATE Host_A_Cert  

TO FILE = 'D:\ShareFoldersMirror\Host_A_Cert.cer';  

同理,在鏡像服務器上重復一次,注意證書名和路徑。備份之后可以在目標文件夾上看到有一個cer文件:

備份證書文件互相Copy至對方文件中。

Step 5:創建登錄賬號

針對每個服務器單獨創建一個服務器登錄賬號,這里只需要創建一個登錄給鏡像服務器即可:

CREATE LOGIN Host_B_Login WITH PASSWORD = 'Pa$$w0rd';

同理,在鏡像服務器上創建Host_A_Login給主體服務器。 

Step 6:創建用戶,並映射到Step 5中創建的登錄賬號中

 在主體服務器上運行:

CREATE USER Host_B_User For Login Host_B_Login;

同理在鏡像服務器也創建。

Step 7:使用證書授權用戶

 創建一個新的證書,並使用從伙伴服務器中復制過來的證書導入,然后映射step 6中的賬號到這個新證書上。

CREATE CERTIFICATE Host_B_Cert  

AUTHORIZATION Host_B_User  

FROM FILE = 'D:\ShareFoldersMirror\Host_B_Cert.cer';

注意鏡像服務器上也同樣。

Step 8:把Step 5中的登錄賬號授權訪問端口

GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [Host_B_Login];

鏡像服務器也一樣。

到此為止,鏡像所需的證書已經配置完畢。

 

第二部分 備份還原數據庫

如果是想按照界面操作的話,可以采用如下方式

step1 創建數據庫,選擇【還原文件和文件組】

step 2  手動輸入目標數據庫名稱 選擇 【源設備】,選擇對應的文件

注意:本次還原是為Mirror做准備,所以,點擊   【選項】  按鈕 。

所以需要選擇【不對數據庫執行任何操作,不回滾未提交的事務….】

 

還原成功。

第三部分 啟動鏡像

依次分別在鏡像Server和主Server上運行以下命令就可以了【最好在Master DB上執行以下命令】

在鏡像Server上線運行

ALTER DATABASE [Test_Mirror]

    SET PARTNER = 'TCP://172.XXX.XXX.93:5022';

GO

在主Server上運行

ALTER DATABASE [Test_Mirror]

    SET PARTNER = 'TCP://172.XXX.XX.106:5022';

GO

配置成功,此時顯示如下:

主體服務器上顯示

 

鏡像服務器上DB顯示

 

第四部分 補充部分

 

問題1  查詢判斷數據庫是否已添加主密鑰

---sys.databases的is_master_key_encrypted_by_server得到是否有加密

select top 100 is_master_key_encrypted_by_server,* from sys.databases

 

----如果沒有就看不到數據【需定義到數據庫】

----解釋說明:##MS_ServiceMasterKey##----是說的整個服務,而##MS_DatabaseMasterKey## 是說的Master數據庫,需留意。

----我們  使用證書搭建鏡像 是需要在master數據庫上創建數據庫主密鑰(如果主密鑰不存在)。

SELECT * FROM sys.symmetric_keys

以下截圖查詢的數據顯示Master數據庫尚未創建主密鑰。

以下截圖的數據顯示Master數據庫已有主密鑰

問題2 由日志傳送更改為鏡像。

  希望直接更改,即不再需要備份和還原。

Step 1 【注意:此時先手動執行一下此DB的Log 備份的Job,然后停掉此Job,接下來再執行Copy Log 文件的Job(如果有此Job的話),再停掉此Job,最后執行Restore 此Log 文件的Job,接着停掉此Job】

Step 2 選擇指定DB,取消【將此數據庫啟用為日志傳送配置中的主數據庫…】,就是把 勾 去掉。

 

Step 3 開始建立伙伴關系

先在備份Server的DB上去做

ALTER DATABASE [數據庫名稱]

    SET PARTNER = 'TCP://172.XXX.XXX.6:10001';

GO

然后再在主DB上運行

ALTER DATABASE [數據庫名稱]

    SET PARTNER = 'TCP://172.XXX.XXX.4:10002';

GO

 

問題3 在建立伙伴關系時,需注意設置伙伴的順序

我們需要先在Mirror服務器上執行,然后再在主服務器中執行,則不報錯。

否則,提示錯誤:

問題刪除主密鑰相關問題

 刪除主密鑰 需先刪除由它加密的證書;而刪除證書需要先刪除由它映射的用戶。

問題搭建前的檢查項

(1) 網絡是否能聯通,並且端口可用;(2)SQL Server數據庫的恢復模式是否為完整;(3)SQL Server上是否有常規的備份作業,特別是日志備份是否已經暫停。


免責聲明!

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



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