欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

程序员文章站 2022-06-23 23:48:26
1.测试验证环境 服务器角色 机器名 IP SQL Server Ver 主体服务器 WIN-TestDB4O 172.83.XXX.XXX SQL Server 2012 - 11.0.5058.0 (X64) 镜像服务器 WIN-TestDB5O 172.73.XXX.XXX SQL Serve ......

1.测试验证环境

 

服务器角色

机器名

ip

sql server ver

主体服务器

win-testdb4o

172.83.xxx.xxx

sql server 2012 - 11.0.5058.0 (x64)

镜像服务器

win-testdb5o

172.73.xxx.xxx

sql server 2012 - 11.0.5058.0 (x64)

2.创建前环境检查

(1)网络是否能联通,并且端口可用。

(2)sql server版本、补丁是否满足镜像要求。

(3)sql server数据库的恢复模式、兼容级别。

(4)sql server上是否有常规的备份作业,特别是日志备份。

(5)主体服务器和镜像服务器的sql server能否互通。

3.使用证书配置镜像,并备份还原数据库

在这一步中,我们将做两件事,第一件是使用证书来配置镜像,第二件是备份还原数据库。在非域环境下,必须使用证书来搭建镜像,所以把搭建证书放在第一步。有些资料上会把备份还原操作放在证书搭建之前,但是根据个人经验,当磁盘io、网络性能不佳的时候,备份、传输、还原都会浪费大量的时间(个人操作过2个小时),并且期间服务器几乎不能操作。这种时候,我会选择先搭建好,再还原,然后马上进行同步,减少主从差异,需要同步更多的数据。

第一部分  创建证书:

【如果服务器使用local system作为sql server服务账号,就需要使用证书授权。】

使用证书搭建镜像的步骤如下:

(1)创建数据库主密钥(如果主密钥不存在)。

(2)在master数据库中创建证书并用主密钥加密。

(3)使用证书授权创建端点(endpoint)。

(4)备份证书成为证书文件。

(5)在服务器上创建登录账号,用于提供其他实例访问。

(6)在master库中创建用户,并映射到上一步的登录账号中。

(7)把证书授权给这些用户。

(8)在端点上授权。

(9)设置镜像服务器的主体伙伴。

(10)设置主体服务器的镜像伙伴。

(11)配置见证服务器。

step 1:创建数据库主密钥

主密钥的用处在这里是用于加密证书,当然主密钥不仅仅只有这个作用。对数据库主密钥的密码及存储保护要小心,这是实例级别的对象,影响面非常广。可以使用下面语句来创建:

use master   
go   
create master key encryption by password = 'pa$$w0rd';

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

通过系统表查看,确认。

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

使用相同方式在镜像服务器创建数据库主密钥。

step 2:创建证书,并用主密钥加密

创建证书时,默认在创建日期开始一年后过期,所以针对证书的创建,要注意其过期时间。下面是在“主体服务器”上创建host_p_cert证书的创建

use master   
go   
create certificate host_a_cert    
with subject = 'host_p certificate',   
expiry_date = '2050-1-1'; --过期日期 

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

使用相同的方法在镜像服务器上实现对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  

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

 在镜像服务器对证书名稍作修改,创建镜像服务器的端点。

step 4:备份证书

备份证书的目的是发送到别的服务器并导入证书,以便别的服务器能通过证书访问这台服务器(主体服务器)。

backup certificate host_a_cert   
to file = 'd:\sharefoldersmirror\host_a_cert.cer';  

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

同理,在镜像服务器上重复一次,注意证书名和路径。备份之后可以在目标文件夹上看到有一个cer文件:

 非域环境下SQL Server搭建Mirror(镜像)的详细步骤

备份证书文件互相copy至对方文件中。

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

step 5:创建登录账号

针对每个服务器单独创建一个服务器登录账号,这里只需要创建一个登录给镜像服务器即可:

create login host_b_login with password = 'pa$$w0rd';

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

同理,在镜像服务器上创建host_a_login给主体服务器。

step 6:创建用户,并映射到step 5中创建的登录账号中

在主体服务器上运行:

create user host_b_user for login host_b_login;

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

同理在镜像服务器也创建。

step 7:使用证书授权用户

创建一个新的证书,并使用从伙伴服务器中复制过来的证书导入,然后映射step 6中的账号到这个新证书上。

create certificate host_b_cert   
authorization host_b_user   
from file = 'd:\sharefoldersmirror\host_b_cert.cer';  

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

注意镜像服务器上也同样。

step 8:把step 5中的登录账号授权访问端口

grant connect on endpoint::[databasemirroring] to [host_b_login];  

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

镜像服务器也一样。

到此为止,配置镜像的步骤已经完毕,后续会给出尽可能自动化的配置脚本。

第二部分  备份还原数据库:

这一部分没有什么特别强调的,在此次试验过程中,使用了界面配置。

注意:本次还原是为mirror做准备,所以,点击   【选项】  按钮 。

所以需要选择【不对数据库执行任何操作,不回滚未提交的事务….

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

 还原成功

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

第三步:启动镜像

依次分别在镜像server和主server上运行以下命令就可以了【最好在master db上执行以下命令】

在镜像server上线运行

alter database [test_mirror] 
    set partner = 'tcp://172.83.xxx.xxx:5022';
go

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

在主server上运行

alter database [test_mirror] 
    set partner = 'tcp://172.73.xxx.xxx:5022';
go

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

 

 配置成功,此时显示如下:

主体服务器上显示

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

镜像服务器上db显示

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

 

4. 补充说明

以下内容用来学习

问题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数据库尚未创建主密钥。

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

以下截图的数据显示master数据库已有主密钥

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

问题2 由日志传送更改为镜像。

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

step 1 【注意:此时先手动执行一下此db的log 备份的job,然后停掉此job,接下来再执行copy log 文件的job(如果有此job的话),再停掉此job,最后执行restore 此log 文件的job,接着停掉此job】

step 2 选择指定db,取消【将此数据库启用为日志传送配置中的主数据库…】,就是把 去掉。

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

 

点击确定后,会要求我们再次连接一下。

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

 非域环境下SQL Server搭建Mirror(镜像)的详细步骤

step 3 开始建立伙伴关系

先在备份server的db上去做

alter database [yyyy_mob] 
    set partner = 'tcp://172.87.xxx.xx2:10001';
go

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

 然后再在主db上运行

alter database [yyyy_mob] 
    set partner = 'tcp://172.89.xxx.xx4:10002';
go

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

问题3 删除主密钥

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

解决方案

drop certificate 证书名

但此时 还有报错了

 非域环境下SQL Server搭建Mirror(镜像)的详细步骤

step 1 删除映射的登录账号和用户名

查看登入名 

非域环境下SQL Server搭建Mirror(镜像)的详细步骤 

删除标识的登入名 ,此时执行还会报同样的错误。

注意登入名和用户名是2个概念,

drop login   for_host_b_user

(有时还要查询  select top 100* from sys.sysusers是否还有这个用户,有的话,还要执行 drop user for_host_b_user)

step 2 删除端口 

select * from sys.endpoints e where e.name = n'endpoint_mirroring'

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

存在则删除端口

非域环境下SQL Server搭建Mirror(镜像)的详细步骤 

step 3  删除

此时,就ok了。去删除证书和主密钥

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

问题4 在建立伙伴关系时,需注意设置伙伴的顺序

如果按照网址上介绍的步骤 ,现在主服务器上执行,设置伙伴。

 非域环境下SQL Server搭建Mirror(镜像)的详细步骤

则可能报错,提示的错误信息如下:

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

我们先在mirror服务器上执行

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

然后再在主服务器中执行,则不报错

非域环境下SQL Server搭建Mirror(镜像)的详细步骤

 

参考文献

http://blog.csdn.net/dba_huangzj/article/details/27652857