SQL_2008数据镜像灾难恢复和搭建镜像服务

今天上班遇到一个兄弟,问我有没有做过SQL镜像恢复。

本人一直呆在小公司,说实话,这个名词还是第一次听说。但是也能大概了解到也就是双机热备那点事。

这个镜像数据库有两种模式,最常用的模式就是 主机------镜像备份的模式 ,第二种模式就是  主机------见证服务器-------镜像备份的模式。

有一点类似exchange的DAG啦。

这个镜像的好处就是,可以实现两台主机数据同步的效果的。特别适合那种7*24小时的产线,又怕数据库会down机的生成部门。

基本原理就是主机模式提供数据库的读写的动作,镜像主机就安静的躺在那里同步数据。

当主机模式down了之后,可以快速在镜像主机恢复数据库,并且是实时的数据库。一点也不会担心数据库会丢失。因为数据都是同步的。

如果两台SVR同时挂机,那就只能oh my god 了。不过这种机率还是比较小。

当然我们也要做一个冷备份。类似BACKUP EXEC这样的东西。

好的,言归正传。

我来聊一下我这个兄弟遇到的问题。他这个数据库是用于MES 系统的。

因为厂区调整。就随手把镜像主机的IP地址给修改了。

但是这个他使用的是第一种模式,没有见证服务,所以改了IP。数据库的master数据库里的配置还是老的IP地址。这样当然就出现了,数据不同步了。

各种在企业管理器上一顿狂操作,发现根本无法下手。

后来搭建实验环境,发现改了IP之后,必须重新做数据镜像。

也就是以前数据镜像写的IP地址是写死了。只能把之前的镜像连接断开,删除。重新写入新的镜像配置,数据才有可能重新配置。

大概要用到这两个命令。

--取消镜像(在主机principle数据库所在HOST上执行)

ALTER DATABASE testdb SET PARTNER OFF;

--主(备)机执行:

ALTER DATABASE shishan SET PARTNER = 'TCP://192.168.1.156:5022'; 

说明:shishan为数据库名,需要根据实际进行修改。192.168.1.156为备机IP地址,需根据实际进行修改。

这两个命令,现在放出来,可能你还有点懵逼。只是要干嘛。

所以请仔细阅读完我上面辛苦的打字。对SQL有一定了解的,应该一看就懂。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

这是我搭建的实验环境,正常的状态就是这样。

里面的查询命令就是在主机库做了镜像切换。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

附带一份网上找的详细资料

相信按这个资料搭建一下,里面的原理就知道的七七八八的。

SQL Server2008R2-镜像数据库实施手册(双机)SQL Server2014同样适用

一、配置主备机

1 服务器基本信息

主机名称为:HOST_A,IP地址为:192.168.1.155

备机名称为:HOST_B,IP地址为:192.168.1.156

二、主备实例互通

实现互通可以使用域或证书来实现,考虑实现的简单,以下选取证书的方式实现。注意:实现“主备数据库实例互通”的操作只需要做一次,例如为了将两个SQL Server 2008的实例中的5个数据库建成镜像关系,则只需要做一次以下操作就可以了;或者这样理解:每一对主备实例(不是数据库)做一次互通。

1、创建证书(主备可并行执行)

--主机执行:

--如果有endpointmaster key先删除

--select * from master.sys.database_mirroring_endpoints
--DROP ENDPOINT Endpoint_Mirroring
--drop master key;

USE master;  

ALTER SERVICE MASTER KEY FORCE REGENERATE

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456';  

CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' ,  

START_DATE = '2012-08-02',  

EXPIRY_DATE = '2099-08-02'; 

 

--备机执行:

--如果有endpointmaster key先删除

--select * from master.sys.database_mirroring_endpoints
--DROP ENDPOINT Endpoint_Mirroring
--drop master key;

USE master;  

ALTER SERVICE MASTER KEY FORCE REGENERATE

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456';  

CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate',  

START_DATE = '2012-08-02',  

EXPIRY_DATE = '2099-08-02'; 

 

2、创建连接的端点(主备可并行执行)

--主机执行: 

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 ); 

 

--备机执行:

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 );

 

3、备份证书以备建立互联(主备可并行执行)

--主机执行:

BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\SQLBackup\HOST_A_cert.cer'; 

 

--备机执行:

BACKUP CERTIFICATE HOST_B_cert TO FILE = 'C:\SQLBackup\HOST_B_cert.cer';

 

 

4、互换证书

将备份到C:\SQLBackup\的证书进行互换,即HOST_A_cert.cer复制到备机的C:\SQLBackup\。HOST_B_cert.cer复制到主机的C:\SQLBackup\。

5、添加登陆名、用户(主备可并行执行)

以下操作只能通过命令行运行,通过图形界面无法完成。(截至SQL Server2005的补丁号为SP2)

--主机执行:

CREATE LOGIN HOST_B_login WITH PASSWORD = '123456';  

CREATE USER HOST_B_user FOR LOGIN HOST_B_login;  

CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'C:\SQLBackup\HOST_B_cert.cer';  

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login]; 

 

--备机执行:

CREATE LOGIN HOST_A_login WITH PASSWORD = '123456';  

CREATE USER HOST_A_user FOR LOGIN HOST_A_login;  

CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'C:\SQLBackup\HOST_A_cert.cer';  

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login]; 

三、建立镜像关系

以下步骤是针对每个数据库进行的,例如:现有主机中有5个数据库以下过程就要执行5次。

1 手工同步登录名和密码

在上文中提到数据库镜像的缺点之一是无法维护登录名,所以需要我们手工维护登录。

通常来说数据库都将会有若干个用户作为访问数据库的用户,并且数据库会有相应的登录名,但是在备机中缺少与之相对应的登录名,例如某业务系统使用’myuser’作为登录名访问数据库,但是在备机中没有’myuser’这个登录名,因此一旦主备切换,业务系统就无法登录数据库了,这种情况称为"孤立用户"。在主机和备机数据库上建立相同用户名及密码即可

2 准备备机数据库(主机备份及镜像还原)

在主机上备份数据库,先做完整备份,再做日志事务备份。

1、主数据必须设置成完整模式进行备份,如下图:

 

  上图中将“恢复模式”选成“完整模式”。

2、备份数据库,如下图:

 

备份时将“备份类型”选成“完整”。

3、备份事务日志,如下图:

 

将“备份类型”选成“事务日志”且备份目录与备份数据库的目录一致。

将主机的备份文件拷贝到备机上,在备机上使用主机的全备文件进行还原,在还原数据的时候需要使用选上“with non recover”。如图所示:

 

 

 

如果执行成功数据库将会变成这个样子:

3 建立镜像

--在备机中执行如下语句:

ALTER DATABASE shishan SET PARTNER = 'TCP://192.168.1.155:5022';

说明:shishan为数据库名,需要根据实际进行修改。192.168.1.155为主机IP地址,需根据实际进行修改。

--主机执行:

ALTER DATABASE shishan SET PARTNER = 'TCP://192.168.1.156:5022'; 

说明:shishan为数据库名,需要根据实际进行修改。192.168.1.156为备机IP地址,需根据实际进行修改。

执行成功后:

 

到此,SQL镜像热备配置完成。

四、常见命令

--切换主备(在主机principle数据库所在HOST上执行)

use master;

alter database testdb set partner failover;

 

-- 备机强制切换(在备机上数据库状态非同步状态下可执行)

use master;

alter database testdb set partner force_service_allow_data_loss;

 

--恢复镜像

use master;

alter database testdb set partner resume;

 

 

--取消见证服务器

ALTER DATABASE testdb SET WITNESS OFF ;

 

--取消镜像(在主机principle数据库所在HOST上执行)

ALTER DATABASE testdb SET PARTNER OFF;

 

--设置镜像数据库还原为正常

RESTORE DATABASE testdb WITH RECOVERY;

 

备份主数据库出现:Backup a database on a HDD with a different sector size,可以执行以下语句备份:

BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  STATS = 10,  FORMAT

 

总结

要进行以上sql server的镜像设置一定要使用sql server 的配置管理器开启TCP/IP协议,如下图

如果没有启用TCP/IP协议则只能在同一个网段内的机器配置镜像,前面的配置步骤里面所用到的IP地址要换成对应的实例名。同一个网段配置并使用镜像的时实性、传输速率更高,适用于大数据量的同步,跨网段或者跨公网的sql server 镜像一般适用于数据量小,时实性要求不高的数据同步,而且数据库在公网上同步也不安全。

猜你喜欢

转载自blog.51cto.com/3180829/2681119