1. DB镜像概述
数据库镜像是指将数据库在两台或多台服务器上按照一定规则完全复制,并且实时保持数据的同步更新,从而实现高可用性和故障恢复的技术。
2. 数据库镜像原理
2.1 镜像类型
数据库镜像有以下三种类型:
高安全模式(High-Safety mode)
高性能模式(High-Performance mode)
高可用性模式(High-Availability mode)
2.2 镜像原理
数据库镜像基于数据库日志的流复制技术来实现数据同步,主要分为以下三个部分:
数据库主实例(Principal):扮演写入者和读取者的角色,将对数据库的更改写入其本地事务日志和数据库,同时将这些更改通过镜像会话发送到镜像实例。
数据库镜像实例(Mirror):扮演只读者的角色,接收主实例发送过来的事务日志记录,并将该记录应用到其本地数据库,从而实现和主实例的数据同步。
见证者(Witness):作为观察者的角色,来判断数据库主实例和数据库镜像实例之间的通信是否成功。
2.3 镜像流程
数据库镜像的流程如下:
主实例启动镜像,将更改转到镜像数据库。
数据库镜像实例接收并记录镜像流。
如果存在见证者,则见证者判断主实例和数据库镜像实例之间的通信是否正常。如果通信正常,则见证者什么也不做,否则见证者会协助实现主从切换。
当主实例发生故障或管理员手动执行故障切换时,数据库镜像实例将变成主实例的角色,该角色现在称为镜像实例。
现有的主实例(如果存在)变为镜像实例的角色。
见证者依次判断镜像实例和其他镜像实例之间的通信是否正常。如果通信正常,则见证者什么也不做,否则见证者会协助实现主从切换。
3. MSSQL数据库镜像实现步骤
3.1. 数据库镜像前置条件
在进行 MSSQL 数据库镜像时,需要满足以下前置条件:
镜像数据库必须处于完整恢复模式(Full Recovery Model)下。
镜像数据库必须启用远程连接。
必须使用 SQL Server Enterprise Edition,在 Standard Edition 下不支持数据库镜像。
必须使用相同版本及 SP(Service Pack)的 SQL Server。
3.2. 镜像配置步骤
MSSQL 数据库镜像配置分为以下步骤:
3.2.1. 准备工作
准备工作主要包括创建主数据库、镜像数据库、目录以及相关备份文件。
-- 创建主数据库
CREATE DATABASE Mirroring_Primary;
-- 创建镜像数据库
CREATE DATABASE Mirroring_Mirror;
-- 创建目录及备份文件
USE Mirroring_Primary;
BACKUP DATABASE Mirroring_Primary TO DISK = N'C:\DBBackup\Mirroring_Primary.bak' WITH INIT;
BACKUP LOG Mirroring_Primary TO DISK = N'C:\DBBackup\Mirroring_Primary.trn' WITH INIT;
USE Mirroring_Mirror;
BACKUP DATABASE Mirroring_Mirror TO DISK = N'C:\DBBackup\Mirroring_Mirror.bak' WITH INIT;
BACKUP LOG Mirroring_Mirror TO DISK = N'C:\DBBackup\Mirroring_Mirror.trn' WITH INIT;
3.2.2. 配置主服务器
主服务器的配置需要将主数据库设置为完整恢复模式,并且开启数据库镜像功能。
-- 将主数据库设置为完整恢复模式
USE master;
ALTER DATABASE Mirroring_Primary SET RECOVERY FULL;
-- 开启数据库镜像功能
USE Mirroring_Primary;
ALTER DATABASE Mirroring_Primary SET PARTNER = 'TCP://主服务器IP地址:5022';
-- 启动镜像
ALTER DATABASE Mirroring_Primary SET SAFETY OFF;
ALTER DATABASE Mirroring_Primary SET PARTNER SAFETY OFF;
-- 开启镜像日志备份
BACKUP LOG Mirroring_Primary TO DISK = N'C:\DBBackup\Mirroring_Primary.trn';
3.2.3. 配置镜像服务器
镜像服务器的配置需要将镜像数据库设置为完整恢复模式,并且开启数据库镜像功能。
-- 将镜像数据库设置为完整恢复模式
USE master;
ALTER DATABASE Mirroring_Mirror SET RECOVERY FULL;
-- 开启数据库镜像功能
USE Mirroring_Mirror;
ALTER DATABASE Mirroring_Mirror SET PARTNER = 'TCP://镜像服务器IP地址:5022';
-- 开启数据库镜像后,需要将镜像数据库恢复为“恢复”状态
RESTORE DATABASE Mirroring_Mirror WITH NORECOVERY;
-- 启动镜像
ALTER DATABASE Mirroring_Mirror SET SAFETY OFF;
ALTER DATABASE Mirroring_Mirror SET PARTNER SAFETY OFF;
3.2.4. 验证镜像服务是否启动成功
在主服务器和镜像服务器上分别使用以下命令查看数据库状态,确保数据库已经开启数据库镜像并且状态为“镜像”。
-- 查询主数据库状态
SELECT DB_NAME(database_id) as DBName, mirroring_state_desc FROM sys.database_mirroring WHERE DB_NAME(database_id) = 'Mirroring_Primary';
-- 查询镜像数据库状态
SELECT DB_NAME(database_id) as DBName, mirroring_state_desc FROM sys.database_mirroring WHERE DB_NAME(database_id) = 'Mirroring_Mirror';
4. 总结
通过本文的介绍,我们了解了 MSSQL 数据库镜像的原理和步骤,并且掌握了如何通过 SQL Server Management Studio 进行主从数据库的配置和启动。数据库镜像是确保数据库高可用性和故障恢复的重要措施,但是也需要考虑如何保证数据的安全性和一致性。因此,在实际应用中,还需要结合实际情况进行合理的配置和管理。