在进行配置之前,要说明一下:配置数据库镜像,不是什么高深的技术,只要按照规范的步骤,就能配置成功,没什么难度(真正有难度的是故障诊断与排除、性能优化),而且只需要在普通的pc上就可以配置成功,对机器、网络、存储等也没什么要求。
所以,你完全可以在公司的局域网内,通过和另外2个同事的电脑,或者在家,借用其他2个室友的笔记本,就能配置成功,如果你在生产环境中配置数据库镜像,那么基本的配置过程也是一样的。
1、基本的信息
本文主要是在3台笔记本上配置数据库镜像,通过证书来实现验证,而不是用域账户来实现。另外,本文配置的是高安全性的数据库镜像,能实现自动秒级切换,需要3台机器:主体服务器、镜像服务器、见证服务器。
主体服务器ip:192.168.1.101
镜像服务器ip:192.168.1.105
见证服务器ip:192.168.1.104
3台机器都安装的是SQL Server 2008R2,版本是:
select @@VERSION /* Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) Apr 22 2011 19:23:43 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1(Build 7601: Service Pack 1) */
另外,你可以通过在3台电脑上,通过SSMS分别连接另外2台电脑,看是否能连通,如果连不上,应该是防火墙屏蔽了端口,我把防火墙关闭了,当然,你也可以把默认1433,和数据库镜像端口5022加入到防火墙的例外中。
为了配置方便,所有的数据库文件、数据库备份文件、证书文件,都放在c:\share 目录下面,所以需要在c盘下,创建一个share。
另外,为了实现文件的共享,可以通过网络共享的方式实现,不过设置比较麻烦,所以我通过QQ传输了数据库备份文件、证书文件等,当然如果你有U盘,也可以通过文件拷贝到U盘,来传输文件的。
注意:下面所有的代码,都需要按照(编号)的顺序,在相应的服务器上执行。
比如:(1)是在主体服务器上执行的,(2)是在镜像服务器上执行的,(3)又是在主体服务器执行的,所有的操作必须要按照(编号)中的编号的顺序来执行。
2、主体服务器的配置
需要把数据库备份文件传输到镜像服务器上:
-- =========================================== -- 无论是主体服务器、镜像服务器, 还是见证服务器 -- 除特别说明外,均需要保证下面的操作在master库中执行 USE master GO -- =========================================== --(1) 建立镜像主体数据库 -- 此操作主体服务器上执行 -- a. 建立测试数据库 CREATE DATABASE DB_Mirror ON( NAME = DB_Mirror_DATA, FILENAME = N'c:\share\DB_Mirror.mdf' ) LOG ON( NAME = DB_Mirror_LOG, FILENAME = N'c:\share\DB_Mirror.ldf' ) --设置数据库的恢复模式是完全模式 ALTER DATABASE DB_Mirror SET RECOVERY FULL GO -- b. 完全备份,需要把这个完全备份文件,传输到镜像服务器上 BACKUP DATABASE DB_Mirror TO DISK = N'c:\share\DB_Mirror.bak' WITH FORMAT GO执行代码后,需要把创建的证书,传输到镜像服务器上:
-- ===========================================
--(3) 主体服务器上的数据库镜像端点及身份验证用的证书
-- 此操作主体服务器上执行
-- a. 用于数据库镜像端点身份验证的证书
IF NOT EXISTS( -- 使用数据库主密钥加密证书
SELECT * FROM sys.symmetric_keys
WHERE name = N'##MS_DatabaseMasterKey##')
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = N'wcis123'
--drop certificate ct_mirror_srva
CREATE CERTIFICATE CT_Mirror_SrvA
WITH
SUBJECT = N'certificate for database mirror',
START_DATE = '19990101',
EXPIRY_DATE = '99991231'
GO
-- b. 备份证书, 以便在与此端点通信的另一端建立此证书
BACKUP CERTIFICATE CT_Mirror_SrvA
TO FILE = 'c:\share\CT_Mirror_SrvA.cer'
GO
--drop endpoint edp_mirror
-- c. 数据库镜像端点
CREATE ENDPOINT EDP_Mirror
STATE = STARTED
AS TCP(
LISTENER_PORT = 5022, -- 镜像端点使用的通信端口
LISTENER_IP = ALL) -- 侦听的IP地址
FOR DATABASE_MIRRORING(
AUTHENTICATION = CERTIFICATE CT_Mirror_SrvA, -- 证书身份验证
ENCRYPTION = DISABLED, -- 不对传输的数据加密,如果需要加密,可以配置为 SUPPORTED 或 REQUIRED, 并可选择加密算法
ROLE = ALL) -- 端点支持所有的数据库镜像角色, 也可以设置为 WITNESS(仅见证服务器),或 PARTNER(仅镜像伙伴)
GO
从镜像服务器创建的证书文件拷贝到主体服务器上后,运行如下代码:
-- =========================================== --(6) 在主体服务器上完成镜像服务器数据库镜像端点的传输安全模式配置 -- 此操作主体服务器上执行 -- a. 建立主体服务器上的证书(假设镜像服务器上备份的证书已经复制到 c:\share\CT_Mirror_SrvB.cer) CREATE CERTIFICATE CT_Mirror_SrvB FROM FILE = 'c:\share\CT_Mirror_SrvB.cer' -- b. 建立登录,用这个login来登录到镜像服务器上 CREATE LOGIN LOGIN_Mirror_SrvB FROM CERTIFICATE CT_Mirror_SrvB -- c. 授予对数据库镜像端点的 connect 权限 GRANT CONNECT ON ENDPOINT::EDP_Mirror TO LOGIN_Mirror_SrvB GO
-- =====================================