热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Sqlserver2008R2配置数据库镜像之我的经验总结

一.相关环境介结。数据库:Sqlserver2008R2网络环境:主机、镜像机(阿里云,青岛节点同域),见证机(本公司自己托管在上海)二.服务器相关配置。1.分别开启三台

一. 相关环境介结。

    数据库:Sqlserver2008R2
    网络环境:主机、镜像机(阿里云,青岛节点同域),见证机(本公司自己托管在上海)

二. 服务器相关配置。

    1. 分别开启三台服务器5022的入站端口。   
    2. 目标数据库的恢复模式必须为“完整”,具体操作:企业管理器->数据库右键->属性->选项->恢复模式选择“完整”->确定。
    3. 远程连接设置(非必要),具体操作:数据库服务实例->右键->方面->外围应用配置器->RemoteDACEnabled->True->确定。

三.配置服务器域。

    1. 给每台服务器(主机、镜像机、见证机)加上FQDN,即设置同样的DNS后缀名。(方法:计算机右键->属性->更改设置->更改->其他->DNS后缀),如:jike.cn,设置后需要重启服务器。   

    2. 修改每台机的HOST文件,将计算机名和IP绑定,如:
      115.10.1.1       SqlHost.jike.cn
        115.10.1.2       SqlMirror.jike.cn
        210.14.79.98   SqlWitness.jike.cn
    提示:SqlHost、SqlMirror和SqlWitness分别为三台服务器的机器名,绝对不能随便起个名。

四. 脚本证书方式配置。

    1. 备份还原数据库

-- 主机备份
USE master
GO

BACKUP DATABASE [TestSync] TO DISK = N'D:\SqlserverMirrorCer\TestSync.bak'
WITH FORMAT, INIT, NAME = N'TestSync-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10;
GO


BACKUP LOG [TestSync] TO DISK = N'D:\SqlserverMirrorCer\TestSync.bak'
WITH NOFORMAT, NOINIT, NAME = N'TestSync-Transaction Log Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10;
GO





-- 镜像恢复
USE master
GO
RESTORE DATABASE [TestSync] FROM DISK = N'D:\SqlserverMirrorCer\TestSync.bak'
WITH FILE = 1,
NORECOVERY, NOUNLOAD,
REPLACE, STATS = 10
GO

RESTORE LOG [TestSync] FROM DISK = N'D:\SqlserverMirrorCer\TestSync.bak'
WITH FILE = 2, NORECOVERY, NOUNLOAD, STATS = 10
GO
View Code

 

    2. 创建证书

------------------------------------------------------------------------
--
============================ 主机上执行 ============================--
--
----------------------------------------------------------------------
USE master
GO

--创建证书,并备份
IF EXISTS(SELECT * FROM sys.databases WHERE name='master' and is_master_key_encrypted_by_server=1)
OPEN MASTER KEY DECRYPTION BY PASSWORD='PWD_DBMirror986252588';
ELSE
CREATE MASTER KEY ENCRYPTION BY PASSWORD='PWD_DBMirror986252588';
GO

IF EXISTS(select * from sys.certificates WHERE name='Cert_Host')
DROP CERTIFICATE Cert_Host;
GO
CREATE CERTIFICATE Cert_Host

WITH SUBJECT=N'Cert_Host Certificate',START_DATE='20120405',EXPIRY_DATE='20990405';

BACKUP CERTIFICATE Cert_Host TO FILE=N'D:\SqlserverMirrorCer\Cert_Host.cer';
GO

--创建镜像端口
IF EXISTS(select * from sys.database_mirroring_endpoints WHERE name='Endpoint_Host')
DROP ENDPOINT Endpoint_Host
GO
CREATE ENDPOINT Endpoint_Host
STATE
= STARTED
AS TCP
(
LISTENER_PORT
=5022,
LISTENER_IP
=ALL
)

FOR DATABASE_MIRRORING
(
AUTHENTICATION
=CERTIFICATE Cert_Host,
ENCRYPTION
=REQUIRED ALGORITHM AES,
ROLE
=PARTNER
)

GO


------------------------------------------------------------------------
--
============================ 镜像机上执行 ============================--
--
----------------------------------------------------------------------
USE master
GO

--创建证书,并备份
IF EXISTS(SELECT * FROM sys.databases WHERE name='master' and is_master_key_encrypted_by_server=1)
OPEN MASTER KEY DECRYPTION BY PASSWORD='PWD_DBMirror986252588';
ELSE
CREATE MASTER KEY ENCRYPTION BY PASSWORD='PWD_DBMirror986252588';
GO

IF EXISTS(select * from sys.certificates WHERE name='Cert_Mirror')
DROP CERTIFICATE Cert_Mirror;
GO
CREATE CERTIFICATE Cert_Mirror

WITH SUBJECT=N'Cert_Mirror Certificate',START_DATE='20120405',EXPIRY_DATE='20990405';

BACKUP CERTIFICATE Cert_Mirror TO FILE=N'D:\SqlserverMirrorCer\Cert_Mirror.cer';
GO

--创建镜像端口
IF EXISTS(select * from sys.database_mirroring_endpoints WHERE name='Endpoint_Mirror')
DROP ENDPOINT Endpoint_Mirror
GO
CREATE ENDPOINT Endpoint_Mirror
STATE
= STARTED
AS TCP
(
LISTENER_PORT
=5022,
LISTENER_IP
=ALL
)

FOR DATABASE_MIRRORING
(
AUTHENTICATION
=CERTIFICATE Cert_Mirror,
ENCRYPTION
=REQUIRED ALGORITHM AES,
ROLE
=PARTNER
)

GO



------------------------------------------------------------------------
--
============================ 见证机上执行 ============================--
--
----------------------------------------------------------------------
USE master
GO

--创建证书,并备份
IF EXISTS(SELECT * FROM sys.databases WHERE name='master' and is_master_key_encrypted_by_server=1)
OPEN MASTER KEY DECRYPTION BY PASSWORD='PWD_DBMirror986252588';
ELSE
CREATE MASTER KEY ENCRYPTION BY PASSWORD='PWD_DBMirror986252588';
GO

IF EXISTS(select * from sys.certificates WHERE name='Cert_Witness')
DROP CERTIFICATE Cert_Witness;
GO

CREATE CERTIFICATE Cert_Witness
WITH SUBJECT=N'Cert_Witness Certificate',START_DATE='20120405',EXPIRY_DATE='20990405';

BACKUP CERTIFICATE Cert_Witness TO FILE=N'D:\SqlserverMirrorCer\Cert_Witness.cer';
GO

--创建镜像端口
IF EXISTS(select * from sys.database_mirroring_endpoints WHERE name='Endpoint_Witness')
DROP ENDPOINT Endpoint_Witness
GO
CREATE ENDPOINT Endpoint_Witness
STATE
= STARTED
AS TCP
(
LISTENER_PORT
=5022,
LISTENER_IP
=ALL
)

FOR DATABASE_MIRRORING
(
AUTHENTICATION
=CERTIFICATE Cert_Witness,
ENCRYPTION
=REQUIRED ALGORITHM AES,
ROLE
=WITNESS
)

GO
View Code

 

    3.创建登录用户(把上面三个步骤中备份的证书COPY到每台机,确保每台机都有此三个证书)

-- 把上面三个步骤中备份的证书COPY到每台机,确保每台机都有此三个证书。

------------------------------------------------------------------------
--
============================ 主机上执行 ============================--
--
----------------------------------------------------------------------
USE master
GO

--为镜像机访问主机的镜像端口而创建登录和用户,并授予连接权限
CREATE LOGIN Login_For_Mirror WITH PASSWORD=N'PWD_DBMirror986252588';
CREATE USER User_For_Mirror FOR LOGIN Login_For_Mirror;
CREATE CERTIFICATE Cert_For_Mirror AUTHORIZATION User_For_Mirror FROM FILE=N'D:\SqlserverMirrorCer\Cert_Mirror.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Host TO Login_For_Mirror;
GO

--为见证机访问主机的镜像端口而创建登录和用户,并授予连接权限
CREATE LOGIN Login_For_Witness WITH PASSWORD=N'PWD_DBMirror986252588';
CREATE USER User_For_Witness FOR LOGIN Login_For_Witness;
CREATE CERTIFICATE Cert_For_Witness AUTHORIZATION User_For_Witness FROM FILE=N'D:\SqlserverMirrorCer\Cert_Witness.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Host TO Login_For_Witness;

GO

------------------------------------------------------------------------
--
============================ 镜像机上执行 ============================--
--
----------------------------------------------------------------------
USE master
GO

--为主机访问镜像机的镜像端口而创建登录和用户,并授予连接权限
CREATE LOGIN Login_For_Host WITH PASSWORD=N'PWD_DBMirror986252588';
CREATE USER User_For_Host FOR LOGIN Login_For_Host;
CREATE CERTIFICATE Cert_For_Host AUTHORIZATION User_For_Host FROM FILE =N'D:\SqlserverMirrorCer\Cert_Host.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Mirror TO Login_For_Host;
GO

--为见证机访问镜像机的镜像端口而创建登录和用户,并授予连接权限
CREATE LOGIN Login_For_Witness WITH PASSWORD=N'PWD_DBMirror986252588';
CREATE USER User_For_Witness FOR LOGIN Login_For_Witness;
CREATE CERTIFICATE Cert_For_Witness AUTHORIZATION User_For_Witness FROM FILE =N'D:\SqlserverMirrorCer\Cert_Witness.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Mirror TO Login_For_Witness;
GO


------------------------------------------------------------------------
--
============================ 见证机上执行 ============================--
--
----------------------------------------------------------------------
USE master
GO

--为主机访问见证机的镜像端口而创建登录和用户,并授予连接权限
CREATE LOGIN Login_For_Host WITH PASSWORD=N'PWD_DBMirror986252588';
CREATE USER User_For_Host FOR LOGIN Login_For_Host;
CREATE CERTIFICATE Cert_For_Host AUTHORIZATION User_For_Host FROM FILE=N'D:\SqlserverMirrorCer\Cert_Host.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Witness TO Login_For_Host;
GO

--为镜像机访问见证机的镜像端口而创建登录和用户,并授予连接权限
CREATE LOGIN Login_For_Mirror WITH PASSWORD=N'PWD_DBMirror986252588';
CREATE USER User_For_Mirror FOR LOGIN Login_For_Mirror;
CREATE CERTIFICATE Cert_For_Mirror AUTHORIZATION User_For_Mirror FROM FILE=N'D:\SqlserverMirrorCer\Cert_Mirror.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Witness TO Login_For_Mirror;
GO
View Code

 

    4.最后一步开始镜像。

-- 镜像机上执行:
--
建立 主机 合作
ALTER DATABASE [TestSync] SET PARTNER =N'TCP://SqlHost.jike.cn:5022';

-- 主机上执行:
--
建立 镜像机 合作
ALTER DATABASE [TestSync] SET PARTNER=N'TCP://SqlMirror.jike.cn:5022';
-- 建立 见证机 合作
ALTER DATABASE [TestSync] SET WITNESS=N'TCP://SqlWitness.jike.cn:5022';
View Code

    1. 配置成功后,主体数据为会显示:主体,已同步,镜机库为:镜像,已同步,正在还原...
    2. 如果镜像创建或同步失败,可通过企业管理器通过配置界面重新配置(数据库->右键->任务->镜像->配置安全性,可参考此文:http://liulike.blog.51cto.com/1355103/339183)。

 

五。其它问题或说明。

    1. 一台服务器只能有一个端点,即每台服务器只能承担主机、镜像、见证其中一个角色。   
    2. 配置域和Host很重要,否则问题很多,笔者在此担搁不少时间。
    3. 见证服务器必须要做,否则不带自动故障转移的镜像没什么大用。

 

参考文章:
----------------------------------------------------------------------------------

http://www.cnblogs.com/Joe-T/archive/2012/04/06/2434350.html
http://liulike.blog.51cto.com/1355103/339183

 


推荐阅读
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
author-avatar
月逝彼山
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有