非域环境下SQL Server搭建Mirror(镜像)的详细步骤
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';

通过系统表查看,确认。

使用相同方式在镜像服务器创建数据库主密钥。
Step 2:创建证书,并用主密钥加密
创建证书时,默认在创建日期开始一年后过期,所以针对证书的创建,要注意其过期时间。下面是在“主体服务器”上创建HOST_P_cert证书的创建
USE master
GO
CREATE CERTIFICATE Host_A_Cert
WITH Subject = 'Host_P Certificate',
Expiry_Date = '2050-1-1'; --过期日期

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

在镜像服务器对证书名稍作修改,创建镜像服务器的端点。
Step 4:备份证书
备份证书的目的是发送到别的服务器并导入证书,以便别的服务器能通过证书访问这台服务器(主体服务器)。
BACKUP CERTIFICATE Host_A_Cert
TO FILE = 'D:\ShareFoldersMirror\Host_A_Cert.cer';

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

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

Step 5:创建登录账号
针对每个服务器单独创建一个服务器登录账号,这里只需要创建一个登录给镜像服务器即可:
CREATE LOGIN Host_B_Login WITH PASSWORD = 'Pa$$w0rd';

同理,在镜像服务器上创建Host_A_Login给主体服务器。
Step 6:创建用户,并映射到Step 5中创建的登录账号中
在主体服务器上运行:
CREATE USER Host_B_User For Login Host_B_Login;

同理在镜像服务器也创建。
Step 7:使用证书授权用户
创建一个新的证书,并使用从伙伴服务器中复制过来的证书导入,然后映射step 6中的账号到这个新证书上。
CREATE CERTIFICATE Host_B_Cert
AUTHORIZATION Host_B_User
FROM FILE = 'D:\ShareFoldersMirror\Host_B_Cert.cer';

注意镜像服务器上也同样。
Step 8:把Step 5中的登录账号授权访问端口
GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [Host_B_Login];

镜像服务器也一样。
到此为止,配置镜像的步骤已经完毕,后续会给出尽可能自动化的配置脚本。
第二部分 备份还原数据库:
这一部分没有什么特别强调的,在此次试验过程中,使用了界面配置。
注意:本次还原是为Mirror做准备,所以,点击 【选项】 按钮 。
所以需要选择【不对数据库执行任何操作,不回滚未提交的事务….】

还原成功

第三步:启动镜像
依次分别在镜像Server和主Server上运行以下命令就可以了【最好在Master DB上执行以下命令】
在镜像Server上线运行
ALTER DATABASE [Test_Mirror]
SET PARTNER = 'TCP://172.83.XXX.XXX:5022';
GO

在主Server上运行
ALTER DATABASE [Test_Mirror]
SET PARTNER = 'TCP://172.73.XXX.XXX:5022';
GO

配置成功,此时显示如下:
主体服务器上显示

镜像服务器上DB显示

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

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

问题2 由日志传送更改为镜像。
希望直接更改,即不再需要备份和还原。
Step 1 【注意:此时先手动执行一下此DB的Log 备份的Job,然后停掉此Job,接下来再执行Copy Log 文件的Job(如果有此Job的话),再停掉此Job,最后执行Restore 此Log 文件的Job,接着停掉此Job】
Step 2 选择指定DB,取消【将此数据库启用为日志传送配置中的主数据库…】,就是把 勾 去掉。

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


Step 3 开始建立伙伴关系
先在备份Server的DB上去做
ALTER DATABASE [YYYY_Mob]
SET PARTNER = 'TCP://172.87.XXX.XX2:10001';
GO

然后再在主DB上运行
ALTER DATABASE [YYYY_Mob]
SET PARTNER = 'TCP://172.89.XXX.XX4:10002';
GO

问题3 删除主密钥

解决方案:
DROP CERTIFICATE 证书名
但此时 还有报错了

Step 1 删除映射的登录账号和用户名
查看登入名

删除标识的登入名 ,此时执行还会报同样的错误。
注意登入名和用户名是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'

存在则删除端口

Step 3 删除
此时,就OK了。去删除证书和主密钥

问题4 在建立伙伴关系时,需注意设置伙伴的顺序
如果按照网址上介绍的步骤 ,现在主服务器上执行,设置伙伴。

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

我们先在Mirror服务器上执行

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

参考文献
http://blog.csdn.net/dba_huangzj/article/details/27652857
非域环境下SQL Server搭建Mirror(镜像)的详细步骤的更多相关文章
- 非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法
非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法 环境:非域环境 因为是自动故障转移,需要加入见证,事务安全模式是,强安全FULL模式 做到最后一 ...
- 非域环境下使用证书部署数据库(SqlServer2008R2)镜像
非域环境下使用证书部署数据库(SqlServer2008R2)镜像 前言 部署数据库镜像一般有两种方式域环境下部署http://liulike.blog.51cto.com/1355103/33918 ...
- SQL非域环境下带自动故障转移数据库镜像的实现方法(包括镜像服务器)
使用数据库镜像来提高数据库的高可用性,在镜像服务器创建镜像数据库的快照以卸载报表查询对生产数据库的负载.TechNet有讲座对此技术进行介绍,但看到大家在讲座的讨论区中遇到了很多问题,下面我把在非域环 ...
- 域环境下装SQL SERVER的一次惨痛经历
SQL SERVER 2008 R2 其实sql server不建议装在域环境下的,但sharepoint必须用域用户来连接.这本来也不是个什么大问题,但是,这一次相当的不顺利哦. 我有单独的域控,单 ...
- SQL2008非域环境直接使用WINDOWS登录的镜像设置
1.检查主库是否为完全备份 2.将数据库备份出来还原到同步库上(完整备份和事务日志分两次备份到同一个备份文件中,然后拷贝到同步机上) 3.用证书太麻烦了,我们直接用两个windows认真的账户 不分主 ...
- 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境
原文:第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj/ ...
- SQL Server扫盲系列——镜像篇
为方便查看,并以专题形式展示,所以我会把一些文章整合起来.本部分为SQL Server镜像系列: 本文出处:http://blog.csdn.net/dba_huangzj/article/detai ...
- MyBatis在非Spring环境下第三方DataSource设置-Druid篇
首先在ITEye上面看到一个同标题文章,在此说明,此文并非转载自 http://iintothewind.iteye.com/blog/2069522 ,因为这篇文章根本就是错误的,照着上面做,工程可 ...
- 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连
在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 sql server服务器sqlserver远程连接数据库防火墙在建立 ...
随机推荐
- Codeforces比赛注意事项(英语比较好,能翻译题目的可以跳过此文章)
由题目可知,这篇文章是讲翻译文章的. 当然不是教英语啦 其实cf的比赛对于本蒟蒻最大的挑战就是翻译题目啦 所以我比赛时只能靠各种翻译器去无耻地翻译,然后读中文. 目前较好的翻译器有:百度,谷歌,有道. ...
- python课堂整理15---map, filter,reduce函数
一.map函数 处理序列(可迭代对象)中的每一个元素,得到的结果是一个‘列表’(其实是个迭代器),该‘列表’元素个数及位置与原来一样 理解下面这段代码: num_l = [1, 2, 4, 6] de ...
- zabbix3.4用Python脚本Excel批量导入主机
1.安装xlrd读取Excel文件 1.1. 下载setuptools-38.2.4.zip,上传至zabbix服务器解压安装,下载地址:https://pypi.python.org/package ...
- zookeeper集群搭建及常用场景实现
本文完整源码地址 基于zookeeper的常用用法.分布式锁.分布式队列及leader选举实现 https://github.com/killianxu/zookeeper_example zooke ...
- [机器学习] SVM——Hinge与Kernel
Support Vector Machine [学习.内化]--讲出来才是真的听懂了,分享在这里也给后面的小伙伴点帮助. learn from: https://www.youtube.com/wat ...
- PLSQL连接数据库报监听程序找不到符合协议堆
服务器上某个数据库出现' ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程'错误,要解决该问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小 根 ...
- Linux平台 Oracle 19c RAC安装Part2:GI配置
三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面配置GI 3 ...
- dubbo文档笔记
配置覆盖关系 以 timeout 为例,显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似: 方法级优先,接口级次之,全局配置再次之. 如果级别一样,则消费 ...
- 【React踩坑记一】React项目中禁用浏览器双击选中文字的功能
常规项目,我们只需要给标签加一个onselectstart事件,return false就可以 例: <div onselectstart="return false;" & ...
- .net持续集成测试篇之Nunit 测试配置
系列目录 在开始之前我们先看一个陷阱 用到的Person类如下 public class Person:IPerson { public string Name { get; set; } publi ...