非域環境下使用證書部署數據庫(SqlServer2008R2)鏡像
前言
部署數據庫鏡像一般有兩種方式域環境下部署http://liulike.blog.51cto.com/1355103/339183 和 非域環境下 證書部署參考地址: http://www.cnblogs.com/shanyou/archive/2010/05/10/1732007.html
這里是自己在三個虛擬機非域環境下部署測試的
一、環境
| 數據庫 |
系統 |
IP |
角色 |
| SqlServer2008R2 |
Server 2008R2 |
10.10.0.52 |
主體 |
| SqlServer2008R2 |
Server 2008R2 |
10.10.0.53 |
鏡像 |
| SqlServer2008R2 |
Server 2008R2 |
10.10.0.54 |
見證 |
配置數據庫鏡像之前 需要打開端口1433和5022 是三台服務器的都要
下面將圖示說明開啟1433和5022的步驟:
- 打開防火牆-》高級設置






二、鏡像部署
1證書與端點(出站連接)
1.1主題服務器
USE master; --DROP MASTER KEY CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1qaz!QAZ'; GO --為主體服務器 host_A 實例制作一個證書。 --DROP CERTIFICATE host_A_cert CREATE CERTIFICATE host_A_cert WITH SUBJECT = 'host_A certificate',START_DATE = '3/12/2015',EXPIRY_DATE = '01/01/2099'; GO --使用該證書為服務器實例創建一個鏡像端點。 --DROP ENDPOINT Endpoint_Mirroring 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 = PARTNER ); GO --備份host_A 證書,並將其復制到鏡像服務器 host_B 和見證服務器 host_C BACKUP CERTIFICATE host_A_cert TO FILE = 'c:\DbMirror\host_A.cer'; GO
1.2鏡像服務器
/*********************************************** 在鏡像服務器 host_B 執行此腳本 ***********************************************/ USE master; --DROP MASTER KEY CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1qaz!QAZ'; GO --為鏡像服務器 host_B 實例制作一個證書。 --DROP CERTIFICATE host_B_cert CREATE CERTIFICATE host_B_cert WITH SUBJECT = 'host_B certificate',START_DATE = '3/12/2015',EXPIRY_DATE = '01/01/2099'; GO --在 host_B 中為服務器實例創建一個鏡像端點。 --DROP ENDPOINT Endpoint_Mirroring 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 = PARTNER ); GO --備份 host_B 證書,並將其復制到主體服務器 host_A 和見證服務器 host_C 上 BACKUP CERTIFICATE host_B_cert TO FILE = 'c:\DbMirror\host_B.cer'; GO
1.3見證服務器
/**************************** 見證服務器 host_C 執行 *****************************/ --ALTER DATABASE MirrorDB SET PARTNER OFF USE master; --DROP MASTER KEY CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1qaz!QAZ'; GO --為此服務器實例制作一個證書。 --DROP CERTIFICATE host_C_cert CREATE CERTIFICATE host_C_cert WITH SUBJECT = 'host_C certificate',START_DATE = '3/12/2015',EXPIRY_DATE = '01/01/2099'; GO --使用該證書為服務器實例創建一個鏡像端點。 --DROP ENDPOINT Endpoint_Mirroring 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 --備份 host_C 證書,並將其復制到主體服務器 host_A 和鏡像服務器 host_C 上 BACKUP CERTIFICATE host_C_cert TO FILE = 'c:\dbmirror\host_C.cer'; GO
2配置出站連接
2.1主體服務器
--在 host_A 上為鏡像服務器 host_B 創建一個登錄名。 USE master; --DROP LOGIN host_B_login CREATE LOGIN host_B_login WITH PASSWORD = '1qaz!QAZ'; GO --創建一個使用該登錄名的用戶。 --DROP USER host_B_user CREATE USER host_B_user FOR LOGIN host_B_login; GO --使證書與該用戶關聯。 --DROP CERTIFICATE host_B_cert CREATE CERTIFICATE host_B_cert AUTHORIZATION host_B_user FROM FILE = 'c:\DbMirror\host_B.cer' GO --授予對遠程鏡像端點的登錄名的 CONNECT 權限。 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_B_login]; GO --在主體服務器 host_A 上為見證服務器 host_C 創建一個登錄名。 USE master; --DROP LOGIN host_C_login CREATE LOGIN host_C_login WITH PASSWORD = '1qaz!QAZ'; GO --創建一個使用該登錄名的用戶。 --DROP USER host_C_user CREATE USER host_C_user FOR LOGIN host_C_login; GO --使證書與該用戶關聯。 --DROP CERTIFICATE host_C_cert CREATE CERTIFICATE host_C_cert AUTHORIZATION host_C_user FROM FILE = 'c:\DbMirror\host_C.cer' GO --授予對遠程鏡像端點的登錄名的 CONNECT 權限。 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_C_login]; GO --主體服務器上創建用於本機的登錄名(MS可以省略) USE master; --DROP LOGIN host_A_login CREATE LOGIN host_A_login WITH PASSWORD= '1qaz!QAZ'; GO --創建一個使用該登錄名的用戶。 --DROP USER host_A_user CREATE USER host_A_user FOR CERTIFICATE host_A_cert; GO --授予對遠程鏡像端點的登錄名的 CONNECT 權限。 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_A_login]; GO
2.2鏡像服務器
--在鏡像服務器 host_B 上為主體服務器 host_A 創建一個登錄名。 USE master; --DROP LOGIN host_A_login CREATE LOGIN host_A_login WITH PASSWORD = '1qaz!QAZ'; GO --創建一個使用該登錄名的用戶。 --DROP USER host_A_user CREATE USER host_A_user FOR LOGIN host_A_login; GO --使證書與該用戶關聯。 --DROP CERTIFICATE host_A_cert CREATE CERTIFICATE host_A_cert AUTHORIZATION host_A_user FROM FILE = 'c:\Dbmirror\host_A.cer' GO --授予對遠程鏡像端點的登錄名的 CONNECT 權限。 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_A_login]; GO --在鏡像服務器 host_B 上為見證服務器 host_C 創建一個登錄名。 USE master; --DROP LOGIN host_C_login CREATE LOGIN host_C_login WITH PASSWORD = '1qaz!QAZ'; GO ----創建一個使用該登錄名的用戶。 --DROP USER host_C_user CREATE USER host_C_user FOR LOGIN host_C_login; GO ----使證書與該用戶關聯。 --DROP CERTIFICATE host_C_cert CREATE CERTIFICATE host_C_cert AUTHORIZATION host_C_user FROM FILE = 'c:\Dbmirror\host_C.cer' GO ----授予對遠程鏡像端點的登錄名的 CONNECT 權限。 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_C_login]; GO --在鏡像服務器 host_B 上為本機創建一個登錄名(MS可以省略) USE master; --DROP LOGIN host_B_login CREATE LOGIN host_B_login WITH PASSWORD = '1qaz!QAZ'; GO --創建一個使用該登錄名的用戶。 --DROP USER host_B_user CREATE USER host_B_user FOR CERTIFICATE host_B_cert; GO --授予對遠程鏡像端點的登錄名的 CONNECT 權限。 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_B_login]; GO
2.3見證服務器
--在見證服務器 host_C 上為主體服務器 host_A 創建一個登錄名。 USE master; --DROP LOGIN host_A_login CREATE LOGIN host_A_login WITH PASSWORD = '1qaz!QAZ'; GO --創建一個使用該登錄名的用戶。 --DROP USER host_A_user CREATE USER host_A_user FOR LOGIN host_A_login; GO --使證書與該用戶關聯。 --DROP CERTIFICATE host_A_cert CREATE CERTIFICATE host_A_cert AUTHORIZATION host_A_user FROM FILE = 'c:\DbMirror\host_A.cer' GO --授予對遠程鏡像端點的登錄名的 CONNECT 權限。 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_A_login]; GO --在見證服務器 host_C 上為鏡像服務器 host_B 創建一個登錄名。 USE master; --DROP LOGIN host_B_login CREATE LOGIN host_B_login WITH PASSWORD = '1qaz!QAZ'; GO --創建一個使用該登錄名的用戶。 --DROP USER host_B_user CREATE USER host_B_user FOR LOGIN host_B_login; GO --使證書與該用戶關聯。 --DROP CERTIFICATE host_B_cert CREATE CERTIFICATE host_B_cert AUTHORIZATION host_B_user FROM FILE = 'c:\DbMirror\host_B.cer' GO --授予對遠程鏡像端點的登錄名的 CONNECT 權限。 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_B_login]; GO
3配置數據庫登錄信息
在主體數據庫中查詢 sid和name
USE master; select sid,name from syslogins;

在備份數據庫執行
USE master; exec sp_addlogin @loginame = 'xiejun', @passwd = '1qaz!QAZ', @sid = 0x9E2D3238732D264483489528B0DC0D9F ;
4備份數據庫
主體數據庫中執行
USE MASTER; GO BACKUP DATABASE xiejun TO DISK = 'c:\DbMirror\DB.bak' WITH INIT GO BACKUP LOG xiejun TO DISK = 'c:\DbMirror\DB_log.bak' WITH INIT GO
在鏡像數據庫
還原的時候必須把數據庫和事務日志以NoRecovery的形式還原

5配置伙伴服務器
執行順序為 鏡像-》主體-》見證
在鏡像服務器配置
ALTER DATABASE xiejun SET PARTNER = 'TCP://10.10.0.52:5022'; GO
在主體服務器配置
ALTER DATABASE xiejun SET PARTNER = 'TCP://10.10.0.53:5022'; GO
在主體服務器配置
ALTER DATABASE [xiejun] SET WITNESS = 'TCP://10.10.0.54:5022'; GO
到此服務器配置成功

