1. 什么是MSSQL镜像数据库?
MSSQL镜像是一种高可用性解决方案,通过将一个实时复制的数据库副本运行在不同的计算机上,实现实时数据备份和快速故障转移。镜像数据库通常被用于需要高可用性和灾难恢复能力的系统。
一个镜像数据库由三个角色组成:主服务器、镜像服务器和见证服务器。主服务器和镜像服务器之间通过网络实时复制数据,如果主服务器发生故障,镜像服务器可以快速自动接手服务,使系统快速恢复,此过程对业务不可见。见证服务器为镜像服务器和主服务器之间提供异地网络连接作为可靠的决策机制,以决定何时将镜像数据库提升为主数据库。
2. MSSQL镜像数据库的优势
2.1 高可用性
通过MSSQL镜像数据库实现自动故障转移的能力,使得数据极少出现中断或者停滞的状态。即使出现故障,数据可以很快恢复,可以快速地进行备份或者恢复操作。
2.2 提升性能
镜像数据库可以快速的响应查询请求,提升系统的处理效率并最大化利用硬件资源。此外,镜像数据库还可以充当主数据库的副本,使得在一些高并发的情况下能够有效地提升系统性能。
2.3 提供数据备份容错能力
通过MSSQL镜像数据库实现数据的自动备份,即实时将主数据库的数据同步到镜像服务器上,可以有效降低管理难度和数据丢失的概率。其次,在原主服务器出现故障时,还可以快速、自动地切换到镜像数据库,保证业务的连续性。
3. MSSQL镜像数据库的适用场景
3.1 需要高可用性和数据容错的系统
MSSQL镜像数据库适用于需要高可用性和快速故障转移的系统,比如云计算、电信、金融业等重要应用系统。
3.2 对数据实时性要求高的场景
例如对数据的实时备份、数据实时同步等场景,通过MSSQL镜像数据库可以较好地实现这些功能。
4. 在库中实现MSSQL数据库的镜像
下面给出一个MSSQL数据库的镜像案例。
4.1 数据库主从配置
首先,需要在主数据库和备份数据库上开启数据库的镜像,并且在主数据库和备份数据库上创建本地安全方案,之后在主数据库上设置镜像的端点,并在备份数据库上添加镜像连接。代码演示:
-- 在主数据库和镜像数据库上启用数据库镜像
ALTER DATABASE author SET PARTNER = 'TCP://MirrorServer.northwind.mssqlnuggets.com:5022'
GO
-- 在主数据库和镜像数据库上创建本地安全方案用来描述备份数据库的登录
CREATE CERTIFICATE PrismDB_Mirror ENDPOINT Authorization
CREATE LOGIN PrismMirrorLogin FROM CERTIFICATE PrismDB_Mirror
-- 在主数据库上设置镜像的端点
CREATE ENDPOINT PrismDB_Mirror
AS TCP(LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (
ROLE = ALL,
AUTHENTICATION = CERTIFICATE PrismDB_Mirror,
ENCRYPTION = REQUIRED ALGORITHM AES,
PORT = 5022
)
-- 在镜像数据库上添加镜像连接
ALTER DATABASE author SET PARTNER = 'TCP://PrimaryServer.northwind.mssqlnuggets.com:5022'
GO
4.2 主从数据的同步
当主数据库和备份数据库之间的镜像配置完成之后,就可以开始进行主从数据的同步了。在主数据库上创建一个数据库后,可以使用Copy Database向新数据库添加数据。代码为:
BACKUP DATABASE author
TO DISK = 'D:\Northwind_trailer.bak'
RESTORE DATABASE authorMirror1 FROM DISK = 'D:\Northwind_trailer.bak'
WITH NORECOVERY
GO
USE master
GO
ALTER DATABASE authorMirror1 SET PARTNER = 'TCP://MirrorServer.northwind.mssqlnuggets.com:5022'
GO
BACKUP LOG author TO DISK = 'D:\Author.trn'
4.3 镜像是否运行正常的检测和应急方案
在生产环境中,需要经常对MSSQL数据库的镜像状态进行检测和应急响应。在MSSQL中,可以使用如下语句检测镜像是否处于运行状态:
-- 查找在运行镜像的主数据库并返回状态
SELECT d.name, t.mirroring_role_desc, t.mirroring_state_desc
FROM sys.databases d
INNER JOIN sys.database_mirroring t ON d.database_id = t.database_id
WHERE t.mirroring_guid IS NOT NULL;
如果发现主从数据库不同步了,可以使用以下语句来解决无法同步的问题:
-- 将当前主数据库从合作伙伴的恢复状态还原
RESTORE DATABASE author WITH RECOVERY
GO
-- 将当前合作伙伴的数据库镜像还原
RESTORE DATABASE authorMirror1 WITH RECOVERY
GO
5. 总结
因为MSSQL镜像数据库能够建立高可用性和高容错的数据库结构,并允许更高级别的系统容错,它已被广泛应用于各种应用场景。本文通过对MSSQL镜像数据库的定义、优势和适用场景的说明,以及一个数据库主从配置案例的演示,希望读者可以更好地理解MSSQL镜像数据库,并能够在自己的项目中应用。