按照基本操作建立鏡像同步的時候,最后步驟報錯
服務器網絡地址 "TCP://XXXXXXX:5022" 無法訪問或不存在。
請檢查網絡地址名稱,並檢查本地和遠程端點的端口是否正常運行
查詢sql日志,發現是‘10052(遠程主機強迫關閉了一個現有的連接。)’,初步判斷是權限原因。針對這種報錯,在網上搜索了大神用證書授權的解決方案后,自己測試通過,記錄一下步驟。(本案例是雙機熱備,只有主體服務器和鏡像服務器,沒有見證服務器)
- 創建數據庫主密鑰
USE master GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourPassword';
刪除的話用drop命令,使用相同方式在鏡像服務器創建主密鑰
- 創建證書,並用主密鑰加密
USE master GO CREATE CERTIFICATE Host_A_Cert WITH Subject = 'Host_A Certificate', Expiry_Date = '2080-1-1'; --過期日期
刪除的話用drop命令,使用相同方式在鏡像服務器創建Host_B_Cert的證書
- 創建端點
IF NOT EXISTS ( SELECT * 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
使用相同方式在鏡像服務器創建Host_B_Cert證書的端點
- 備份證書
BACKUP CERTIFICATE Host_A_Cert TO FILE = 'C:\ShareFolders\Host_A_Cert.cer';
將備份出來的證書復制到鏡像服務器。使用相同方式在鏡像服務器備份證書Host_B_Cert,將鏡像服務器證書復制到主體服務器。
- 創建登錄賬號
CREATE LOGIN Host_B_Login WITH PASSWORD = 'YourPassword';
創建一個賬號給鏡像服務器使用,使用同樣方式在鏡像服務器創建一個賬號Host_A_Login給主體服務器使用。
- 創建用戶,並映射到剛才創建的登錄賬號
CREATE USER Host_B_User For Login Host_B_Login;
使用相同方式在鏡像服務器創建用戶Host_A_User映射到剛才創建的登錄賬號
- 使用證書授權用戶
CREATE CERTIFICATE Host_B_Cert AUTHORIZATION Host_B_User FROM FILE = 'C:\Certifications\Host_B_Cert.cer';
創建一個新證書,並使用剛才從鏡像服務器復制過來的證書導入,然后映射用戶到這個新證書上。在鏡像服務器也這樣執行一遍。
- 將登錄賬號授權訪問端口
GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [Host_B_Login];
在鏡像服務器上也執行一遍。至此,證書授權結束。
- 執行鏡像配置步驟(主體備份數據庫,鏡像還原數據庫,具體自行搜索,網上都有)