
引言:数据库高可用为何离不开镜像?
在企业的数字化运营中,数据库一旦出现故障,可能导致业务中断、数据丢失甚至客户流失。SQL Server 2016 提供了多种高可用性方案,其中数据库镜像(Database Mirroring)以配置简单、无需共享存储、支持自动故障转移等特点,成为众多中小企业的首选方案。
双镜像架构通过在主服务器与镜像服务器之间维护数据库的实时副本,确保在主库发生故障时备用库可快速接管服务。本文将详细讲解 SQL Server 2016 双镜像的完整配置流程、运行模式选择以及日常运维要点,帮助你快速搭建一套稳定可靠的数据库高可用环境。
镜像架构的核心概念
三种角色
| 角色 | 功能说明 | 数据状态 |
|---|---|---|
| 主体服务器 | 提供数据库读写服务,处理所有用户请求 | 最新数据,在线可用 |
| 镜像服务器 | 保持同步副本,主体故障时自动或手动接管 | 与主体实时或近实时同步 |
| 见证服务器 | 可选角色,提供仲裁实现自动故障转移 | 仅存储状态信息,不复制数据 |
两种运行模式
高安全模式(同步提交):主体服务器在提交事务前,必须等待镜像服务器确认日志已写入。这种模式确保数据零丢失,但会增加事务响应延迟,适用于局域网内部的高可靠场景。
高性能模式(异步提交):主体服务器提交事务后立即返回客户端结果,无需等待镜像确认。性能开销极小,适合跨地域部署,但故障发生时可能出现少量数据丢失。
环境准备
配置双镜像之前,需要确认以下条件都已满足:
- 两台服务器均安装 SQL Server 2016(Standard 或 Enterprise 版本),建议版本号一致
- 操作系统为 Windows Server 2012 R2 或更高版本
- 主备服务器之间 TCP 端口互通(镜像端点默认使用 5022 端口)
- 待镜像的数据库必须采用完整恢复模式(Full Recovery Model)
- 防火墙已放行镜像端点端口,或已暂时关闭防火墙进行测试
如需获取 SQL Server 相关管理工具和运维资源,欢迎访问 IT峰哥软件库 搜索数据库管理类工具。
详细配置步骤
第一步:创建镜像端点
在主库和镜像库上分别创建数据库镜像端点,使用 TCP 协议监听指定端口。以下是在主体服务器上执行的 T-SQL 语句:
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATA_MIRRORING (
ROLE = PARTNER,
AUTHENTICATION = NEGOTIATE,
ENCRYPTION = SUPPORTED
);
GO
在镜像服务器上执行相同的语句(ROLE 同样设为 PARTNER,SQL Server 会根据后续配置自动识别角色)。
第二步:完整备份并还原到镜像服务器
对主体数据库执行完整备份:
BACKUP DATABASE [YourDatabase]
TO DISK = N'C:BackupYourDatabase.bak'
WITH FORMAT, INIT;
GO
将备份文件复制到镜像服务器后,使用 WITH NORECOVERY 选项还原:
RESTORE DATABASE [YourDatabase]
FROM DISK = N'C:BackupYourDatabase.bak'
WITH NORECOVERY;
GO
如果在备份后产生了事务日志备份,也需要一并还原到镜像服务器(同样使用 WITH NORECOVERY)。还原完成后,镜像库处于”正在还原”状态,这是正常现象。
第三步:配置镜像伙伴关系
首先在镜像服务器上执行以下命令,将其指向主体服务器:
ALTER DATABASE [YourDatabase]
SET PARTNER = 'TCP://主体服务器IP:5022';
GO
然后在主体服务器上执行反向配置:
ALTER DATABASE [YourDatabase]
SET PARTNER = 'TCP://镜像服务器IP:5022';
GO
两条命令均执行成功后,镜像配置即完成。可以在 SQL Server Management Studio 中查看镜像状态,数据库应显示为”已同步”或”正在同步”状态。
第四步:配置见证服务器实现自动故障转移
见证服务器是一个可选的第三个 SQL Server 实例,用于在主体宕机时自动决策是否触发故障转移。见证服务器可以使用 SQL Server Express 版,配置命令如下:
ALTER DATABASE [YourDatabase]
SET WITNESS = 'TCP://见证服务器IP:5022';
GO
此命令只需在已参与镜像的任意一台服务器上执行一次。配置见证后,镜像运行模式会自动升级为”高安全模式 + 自动故障转移”,当主体服务器意外离线时,SQL Server 会自动将镜像服务器提升为新的主体。
日常运维与故障处理
监控镜像状态
使用以下 T-SQL 查询可以快速了解镜像运行状态:
SELECT
database_id,
mirroring_role_desc,
mirroring_state_desc,
mirroring_safety_level_desc,
mirroring_witness_state_desc
FROM sys.database_mirroring
WHERE mirroring_guid IS NOT NULL;
常见故障与排查
端点无法连接:检查防火墙是否开放了 5022 端口,确认 SQL Server Browser 服务已启动,使用 telnet 测试端口连通性。
镜像同步挂起:通常由网络闪断或日志传输积压引起。检查主体和镜像服务器的日志文件,通过以下命令恢复同步:
ALTER DATABASE [YourDatabase] SET PARTNER RESUME;
GO
手动故障转移演练
在正常情况下手动切换角色,验证镜像是否配置正确:
ALTER DATABASE [YourDatabase] SET PARTNER FAILOVER;
GO
执行后主体和镜像角色互换。建议在正式上线前进行一次完整的故障转移演练,确保故障发生时切换流程顺畅。
常见问题 FAQ
问:SQL Server 镜像支持跨网段部署吗?
答:支持,但需要确保网络延迟在可接受范围内。高性能模式(异步)更适合跨地域部署,高安全模式(同步)建议在局域网内使用。
问:镜像是免费的还是需要额外授权?
答:数据库镜像是 SQL Server 标准版和企业版内置功能,不需要额外授权费用。
问:镜像和 AlwaysOn 可用性组有什么区别?
答:镜像配置更简单,不需要域环境和共享存储;AlwaysOn 支持多个只读副本和负载均衡,但配置成本更高。两者适用于不同的高可用场景。
问:镜像配置完成后如何移除?
答:在主体服务器上执行 ALTER DATABASE [YourDatabase] SET PARTNER OFF,即可中断镜像关系。
问:日志文件增长过快怎么办?
答:确保镜像数据库处于 NORECOVERY 状态且日志传输正常。定期对主体数据库进行日志备份,控制日志文件大小。
问:镜像服务器重启后会自动恢复同步吗?
答:是的,只要端点和网络配置没有变化,SQL Server 会自动重新建立镜像连接并恢复同步。
总结
SQL Server 2016 双镜像数据库同步是一项成熟且可靠的高可用技术,通过本文的步骤可以快速搭建一套主备数据实时同步的数据库环境。镜像架构的核心价值在于:当主服务器出现故障时,备用服务器能够无缝接管业务,将停机时间压缩到最低。建议在生产环境部署前,先在测试环境中完成完整的功能验证和故障转移演练。如需获取 SQL Server 管理工具和相关资源,请访问 IT峰哥软件库,本站持续更新各类数据库管理软件和运维工具。