SQL Server 镜像部署:主从服务器配置与手动故障转移操作
一、镜像部署基本概念
SQL Server 镜像通过维护主数据库(Principal)和镜像数据库(Mirror)的实时同步实现高可用性。核心组件:
- 主体服务器:处理所有读写操作
- 镜像服务器:实时同步数据的热备节点
- 见证服务器(可选):自动故障转移的仲裁节点
数学关系描述同步过程: $$ \Delta D_{\text{principal}} \xrightarrow{\text{日志传送}} \Delta D_{\text{mirror}} $$ 其中 $\Delta D$ 表示数据变更量
二、主从服务器配置步骤
前提条件:
- 所有服务器相同SQL Server版本
- 数据库恢复模式为 完整恢复模式
- 配置专用镜像端点
配置流程:
-- 1. 主库备份与日志初始化
BACKUP DATABASE [YourDB] TO DISK = 'D:\Backup\YourDB.bak'
WITH FORMAT;
BACKUP LOG [YourDB] TO DISK = 'D:\Backup\YourDB.trn';
-- 2. 镜像库还原(NORECOVERY模式)
RESTORE DATABASE [YourDB] FROM DISK = 'D:\Backup\YourDB.bak'
WITH NORECOVERY, REPLACE;
RESTORE LOG [YourDB] FROM DISK = 'D:\Backup\YourDB.trn'
WITH NORECOVERY;
-- 3. 创建镜像端点(主/从服务器均执行)
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER);
-- 4. 建立镜像会话(主服务器执行)
ALTER DATABASE [YourDB]
SET PARTNER = 'TCP://MirrorServer:5022';
验证配置:
SELECT database_id, mirroring_state_desc
FROM sys.database_mirroring
WHERE database_id = DB_ID('YourDB');
预期输出:SYNCHRONIZED
三、手动故障转移操作
适用场景:
- 计划维护
- 主服务器性能瓶颈
- 自动故障转移未触发
操作步骤:
-
检查同步状态(主服务器)
SELECT DB_NAME(database_id), mirroring_state_desc FROM sys.database_mirroring;确保状态为
SYNCHRONIZED -
发起故障转移(主服务器)
ALTER DATABASE [YourDB] SET PARTNER FAILOVER; -
角色切换验证:
- 原主服务器:
SELECT @@SERVERNAME→ 显示为镜像角色 - 原镜像服务器:
SELECT DB_NAME(database_id), mirroring_role_desc→ 显示为主体角色
- 原主服务器:
四、关键注意事项
-
网络要求:
- 主/从服务器延迟需满足 $RTT < 1.5s$
- 专用网络带宽满足日志传输速率 $B \geq \Delta L/t$($\Delta L$为日志生成量,$t$为时间窗口)
-
故障转移影响:
- 应用需支持自动重连
- 未提交事务自动回滚
- 切换时间通常在 $T \leq 3s$
-
监控建议:
-- 监控镜像队列大小 SELECT log_send_queue_size_kb/1024.0 AS [Queue_MB] FROM sys.dm_db_mirroring WHERE database_id = DB_ID('YourDB');健康阈值:$Queue_{\text{MB}} < 50$
最佳实践:定期执行故障转移演练,验证恢复时间目标(RTO)是否满足 $RTO \leq 30s$。建议在非高峰时段操作,并提前通知应用团队。

2021

被折叠的 条评论
为什么被折叠?



