SQLServer 数据库镜像+复制方案
目标:
主机做了Mirror和Replication,当主机出现问题时,Replication和Mirror实现自动的故障转移(Mirror 和Replication都切换到备机,而当主机
重新启动后,自动充当备机的角色)。
环境:
五台虚拟机,配置均为Windows2008 Enterprise + SQLServer2008R2 Enterprise
08R201:Mirror 见证机(WITNESS) IP:192.168.56.101
08R202:主机(Rep+Mirror) IP:192.168.56.102
08R203:Rep分发机 IP:192.168.56.103
08R204:Rep订阅机 IP:192.168.56.104
08R205:镜像机(Mirror) IP:192.168.56.105
步骤:
配置有见证服务器的镜像
- 创建证书和Endpoint
08R202(Master) 上运行下面的脚本:
--主机执行: USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456abc'; CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' , START_DATE = '11/08/2010',EXPIRY_DATE = '10/31/2099'; --主机执行: 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 = ALL ); --主机执行: BACKUP CERTIFICATE HOST_A_certTO FILE = 'D:HOST_A_cert.cer';
08R205(Mirror) 上运行下面的脚本:
--备机执行: USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456abc'; CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate', START_DATE = '11/08/2010',EXPIRY_DATE = '10/31/2099'; --备机执行: 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 = ALL ); --备机执行: BACKUP CERTIFICATE HOST_B_certTO FILE = 'D:HOST_B_cert.cer';
08R201(WITNESS) 上运行下面的脚本:
--见证机执行 USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456abc'; CREATE CERTIFICATE HOST_W_cert WITH SUBJECT = 'HOST_W certificate', START_DATE = '11/08/2010',EXPIRY_DATE = '10/31/2099'; --见证机执行 CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_W_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL ); --见证机执行 BACKUP CERTIFICATE HOST_W_certTO FILE = 'D:HOST_W_cert.cer';
- 交换证书
将HOST_B_cert.cer和HOST_W_cert.cer拷贝到 08R202 机器的”D:Cert“目录;
将HOST_A_cert.cer和HOST_W_cert.cer拷贝到 08R205 机器的”D:Cert“目录;
将HOST_A_cert.cer和HOST_B_cert.cer拷贝到 08R201 机器的”D:Cert“目录;
08R202(Master) 上运行下面的脚本:
--Master CREATE LOGIN HOST_B_login WITH PASSWORD = '123abc!@#'; CREATEUSER HOST_B_user FOR LOGIN HOST_B_login; CREATE CERTIFICATE HOST_B_certAUTHORIZATION HOST_B_user FROM FILE = 'D:CertHOST_B_cert.cer'; GRANTCONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login]; CREATE LOGIN HOST_W_login WITH PASSWORD = '123abc!@#'; CREATE USER HOST_W_user FORLOGIN HOST_W_login; CREATE CERTIFICATE HOST_W_cert AUTHORIZATIONHOST_W_user FROM FILE = 'D:CertHOST_W_cert.cer'; GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [HOST_W_login];
08R205(Mirror) 上运行下面的脚本:
--Mirror CREATE LOGIN HOST_A_login WITH PASSWORD = '123abc!@#'; CREATEUSER HOST_A_user FOR LOGIN HOST_A_login; CREATE CERTIFICATE HOST_A_certAUTHORIZATION HOST_A_user FROM FILE = 'D:CertHOST_A_cert.cer'; GRANTCONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login]; CREATE LOGIN HOST_W_login WITH PASSWORD = '123abc!@#'; CREATE USER HOST_W_user FORLOGIN HOST_W_login; CREATE CERTIFICATE HOST_W_cert AUTHORIZATIONHOST_W_user FROM FILE = 'D:CertHOST_W_cert.cer'; GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [HOST_W_login];
08R201(WITNESS) 上运行下面的脚本:
--WITNESS CREATE LOGIN HOST_A_login WITH PASSWORD = '123abc!@#'; CREATEUSER HOST_A_user FOR LOGIN HOST_A_login; CREATE CERTIFICATE HOST_A_certAUTHORIZATION HOST_A_user FROM FILE = 'D:CertHOST_A_cert.cer'; GRANTCONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login]; CREATE LOGIN HOST_B_login WITH PASSWORD = '123abc!@#'; CREATE USER HOST_B_user FORLOGIN HOST_B_login; CREATE CERTIFICATE HOST_B_cert AUTHORIZATIONHOST_B_user FROM FILE = 'D:CertHOST_B_cert.cer'; GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
- 备份还原数据库
08R202(Master) 上备份数据库:
BACKUP DATABASE RepTest TO DISK='D:tempRepTest.bak' BACKUP LOG RepTestTO DISK='D:tempRepTest.trn'
将备份文件拷贝到 08R205(Mirror) 上做还原(最好以SA帐号登录,使得数据库所有者为”SA“):
--RESTORE RESTORE DATABASE RepTest FROM DISK = N'D:RepTest.bak' WITHFILE = 1, MOVE N'RepTest' TO N'D:DataRepTest.mdf', MOVE N'RepTest_log'TO N'D:DataRepTest_log.ldf', NORECOVERY, NOUNLOAD, STATS = 10 GORESTORE LOG RepTest FROM DISK ='D:RepTest.trn' WITH NORECOVERY
- 建立镜像
在08R205(Mirror) 上执行:
--Mirror ALTER DATABASE RepTest SET PARTNER ='TCP://192.168.56.102:5022';
在 08R202(Master)上执行:
ALTER DATABASE RepTest SET PARTNER = 'TCP://192.168.56.105:5022'; ALTERDATABASE RepTest SET WITNESS = 'TCP://192.168.56.101:5022'; ALTERDATABASE RepTest SET SAFETY FULL
到此,镜像已经建立完成。
配置Replication(事务型复制)
Replicaiton不做具体的搭建过程,只做几点说明:
1. 08R202和08R205都需要搭建到08R203的Distribution;

2. 08R202和08R205上的发布库的所有者必须为“SA”,否则切换会出现如下错误:The process could not execute ‘sp_replcmds’ on ‘WIN-08R205′.
3. 08R203分发机上配置文件需要做如下修改(配置故障转移Partner):
--配置复制故障转移参数 --查看代理配置,在分发服务器运行 execsp_help_agent_profile --Agent_Type含义 --1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; --4 = Merge Agent; 9 = Queue Reader Agent. --对于事务复制,需查看Agent_Type=1,2的Profile_id --对于事务复制,需要配置快照代理(Snapshot Agent)和日志读取代理(Log Reader Agent) execsp_add_agent_parameter @profile_id = 1, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'WIN-08R205'--镜像服务器名称 exec sp_add_agent_parameter @profile_id = 2, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'WIN-08R205'--镜像服务器名称
修改完成后,记得重启Agent服务,使之生效。
4. 从08R202创建到08R204的同步链。
模拟故障转移并观察结果
1. 暂停08R202的SQLServer服务;
2. 到08R205上观察镜像和同步链是否转移过去了;

3. 如果同步链正常,修改某个表中的数据,看是否能同步到08R204上;
4. 重新启动08R202的SQLServer服务,看其是否成为了镜像机;

5. 如果一起都正常,那恭喜啦,我们的测试成功。
SQLServer 数据库镜像+复制方案的更多相关文章
- SQLServer 数据库镜像+复制切换方案
目标: 主机做了Mirror和Replication,当主机出现问题时,Replication和Mirror实现自动的故障转移(Mirror 和Replication都切换到备机,而当主机 重新启动后 ...
- SQLServer数据库镜像配置
目录 一.目标...2 二.前提条件.限制和建议...2 三.设置概述...2 四.安装Sql Server 2008 enterprise X64.3 4.1.安装.NET3.5.3 4.2.安装时 ...
- 003.SQLServer数据库镜像高可用部署
一 数据库镜像部署准备 1.1 数据库镜像支持 有关对 SQL Server 2012 中的数据库镜像的支持的信息,请参考:https://docs.microsoft.com/zh-cn/previ ...
- 002.SQLServer数据库镜像高可用简介
一 数据库镜像简介 1.1 数据库镜像概述 数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎服务器实例上. 通常,这些服务器实例驻留在不同位置的计算机上 ...
- sqlserver数据库镜像运行模式
运行模式: 从大层面来说,SQL Server镜像只有两种模式:高安全模式和高性能模式.两种模式的主要区别在于在事务提交后的操作.可以从图1-1中查看运行模式. 在高性能模式下,主体服务器不需要等待镜 ...
- SQLServer 复制和数据库镜像 具体配置部署
SQLserver 能够把镜像和复制同一时候部署,结合了两方的高可用性.能够使数据库得到更好的高可用性和容灾的保证. 关于镜像:f=255&MSPPError=-2147217396" ...
- 数据库热备之SQLServer的数据库镜像实施笔记
/ 最初在为公司设计SQLServer数据库镜像的时候,首先考虑的是高可用性(三台计算机,一台见证服务器,一台做主数据库,一台做镜像) 在虚拟机环境下部署成功,一切都是那么的完美.故障转移3秒之内就可 ...
- SQL Server复制情况下的高可用方案(一)镜像+复制
数据库镜像可以与事务复制一起使用实现数据库整体的高可用性和高性能,其中镜像可以提供故障检测和故障转移,复制则用于实现读写分离. 数据库镜像涉及一个数据库的两个副本,这两个副本通常驻留在不同的计算机上. ...
- MySQL 数据库双向镜像、循环镜像(复制)
在MySQL数据库镜像的贴子中,主数据库A 的数据镜像到从数据库B,是单向的,Zen Cart网店的数据读写都必须在数据库A进行,结果会自动镜像到数据库B中.但是对数据库B的直接操作,不会影响数据库A ...
随机推荐
- 【.net 深呼吸】细说CodeDom(5):类型成员
前文中,老周已经厚着脸皮介绍了类型的声明,类型里面包含的自然就是类型成员了,故,顺着这个思路,今天咱们就了解一下如何向类型添加成员. 咱们都知道,常见的类型成员,比如字段.属性.方法.事件.表示代码成 ...
- Linux中进行单文件内容的复制
文件内容复制的常规方法: 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长 一次性复制文件的内容,这种方法必须首先获取 ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
- Laravel 5.x 请求的生命周期(附源码)
Laravel最早接触是刚开始实习的时候,那时通过网上的学习资料很快便上手,开发模块接口.后来没有什么深入和总结,但是当我刚开始学Laravel的时候,我对Laravel最大的认识就是,框架除了路由. ...
- Adaboost提升算法从原理到实践
1.基本思想: 综合某些专家的判断,往往要比一个专家单独的判断要好.在"强可学习"和"弱科学习"的概念上来说就是我们通过对多个弱可学习的算法进行"组合 ...
- MAVEN学习-第一个Maven项目的构建
MAVEN安装成功之后就可以进行项目的构建和管理了: 为什么要用maven进行项目的构建和管理? 对于初学者来说一个最直接的也是最容易里的优点在于JAR包的管理,相对于以前开发一个项目的时候我们需要用 ...
- Javacript实现字典结构
字典是一种用[键,值]形式存储元素的数据结构.也称作映射,ECMAScript6中,原生用Map实现了字典结构. 下面代码是尝试用JS的Object对象来模拟实现一个字典结构. <script& ...
- Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)
作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...
- Greenplum 的分布式框架结构
Greenplum 的分布式框架结构 1.基本架构 Greenplum(以下简称 GPDB)是一款典型的 Shared-Nothing 分布式数据库系统.GPDB 拥有一个中控节点( Master ) ...
- zookeeper集群的搭建以及hadoop ha的相关配置
1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...