环境: SQLServer2012SP1 主:10.202.11.47 备:10.202.11.49 不配置见证服务器 步骤: 第1 步:创建master key(主密钥) 主库中执行:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Aa000000' 查看主密钥是否建立:
select
is_master_key_encrypted_by_server
,*
from
sys
.
databases
备库中执行同样操作:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Aa000000' 第2 步:创建证书使用密钥加密 主库中执行:
USE master
GO
CREATE CERTIFICATE Host_A_Cert
WITH Subject = 'Host_47 Certificate' ,
Expiry_Date = '2055-1-1' ; -- 过期日期
备库中执行:
USE master
GO
CREATE CERTIFICATE Host_B_Cert
WITH Subject = 'Host_49 Certificate' ,
Expiry_Date = '2055-1-1' ; -- 过期日期 第3 步:创建endpoint 主库中执行:
IF NOT EXISTS
( SELECT 1 FROM sys . database_mirroring_endpoints )
BEGIN
CREATE 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 )
END 如果存在endpoint则可以修改使用
SELECT * FROM sys . database_mirroring_endpoints
ALTER 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 ) 备库中执行:
IF NOT EXISTS
( SELECT 1 FROM sys . database_mirroring_endpoints )
BEGIN
CREATE 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 )
END 第4 步:备份证书
主备库OS中创建文件夹 C:\MIRROR 主库中执行:
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\MIRROR\HOST_A_cert.cer' ; 备库中执行:
BACKUP
CERTIFICATE
HOST_B_cert
TO
FILE
=
'C:\MIRROR\HOST_B_cert.cer'
;
主备库OS中相互copy证书
第5
步:创建登录login
主库中执行:
CREATE LOGIN Host_B_Login WITH PASSWORD = 'Password666' 备库中执行:
CREATE LOGIN Host_A_Login WITH PASSWORD = 'Password666' 第6 步:创建User并映射到login 主库中执行:
CREATE USER Host_B_User For Login Host_B_Login ; 备库中执行:
CREATE USER Host_A_User For Login Host_A_Login ; 第7 步:创建证书,并使用从伙伴服务器中copy过来的证书导入,再授权证书给账号 ***************************************** 如果存在则先删除
IF EXISTS( select * from sys . certificates WHERE name = 'HOST_B_cert' )
DROP CERTIFICATE HOST_B_cert
GO ***************************************** 主库中执行:
CREATE CERTIFICATE Host_B_Cert AUTHORIZATION Host_B_User FROM FILE = 'C:\MIRROR\Host_B_Cert.cer' ; 备库中执行:
CREATE CERTIFICATE Host_A_Cert AUTHORIZATION Host_A_User FROM FILE = 'C:\MIRROR\Host_A_Cert.cer' ; 第8 步:授权connect on endpoint权限至login 主库中执行:
GRANT CONNECT ON ENDPOINT :: [Mirroring] TO [Host_B_Login]
备库中执行:
GRANT
CONNECT
ON
ENDPOINT
::
[Mirroring]
TO
[Host_A_Login]
第9
步:备份还原db
主库中执行:
右键需要做mirror的DB->Tasks->back up...
Backup type选择Full,并设置back up to:备份文件目录,之后点OK完成Full backup
再Backup type选择Transaction log,并设置back up to:备份文件目录,
Options->Overwrite media->Back up to the existing media set,之后点OK完成Transaction backup
备库中执行:
右键database->restore database
Device选择主库已备份的文件
Options->recovery state:选择restore with norecovery模式还原,否则会报错Msg 1416
点击OK
第10
步:开启mirror
在备库上执行(
必须备库上先执行
):
IP
TCP://10.202.11.47:5022
为主库IP
ALTER
DATABASE
mesdb
SET
PARTNER
=
'TCP://10.202.11.47:5022'
;
在主库上执行:
IP
TCP://10.202.11.49:5022
为备主库IP
ALTER
DATABASE
mesdb
SET
PARTNER
=
'TCP://10.202.11.49:5022'
;
此时,mirror已经开启。主库状态已变为principal, synchronized
另,根据需求可以修改mirror为high performance模式(默认试high safety)
ALTER DATABASE mesdb SET SAFETY OFF 第11 步:可以对备库mirror DB建立只读快照DB(选用)
备库中执行:
create database snap_mesdb
on ( name = mesdb , -- 文件逻辑名,需要和 mes 中一致
filename = 'c:\db_snapshot\snap_mes_1.ss' –- 快照物理文件名,可随便取
)
as
snapshot
of
mesdb ---
需要做快照的
DB
至此,非域环境中SQL Server mirror的搭建完成
