教你一步步搞定SQL Server镜像,别怕操作复杂其实没那么难
- 问答
- 2026-01-14 11:19:13
- 2
整理自微软官方文档、数据库管理员社区分享以及《SQL Server高可用性实战》等技术资料)
很多朋友一听到“SQL Server镜像”就觉得头大,感觉是DBA专家才能碰的高级功能,其实不然,它的核心思想非常简单,就像给重要的数据找一个实时同步的“双胞胎兄弟”,这台兄弟服务器(我们称之为镜像服务器)随时准备着,万一主服务器“生病”倒下,它能立刻顶上,保证业务不中断,下面,我就用最直白的话,带你一步步把它搭建起来。
第一步:准备工作,打好地基
在开始之前,你得准备好三台服务器(或者虚拟机),别紧张,它们的角色很清晰:
- 主服务器:就是你现在正在用的、处理所有业务的数据库服务器。
- 镜像服务器:你要准备的那台“双胞胎兄弟”,它的硬件配置最好和主服务器一样,至少不能差太多。
- 见证服务器:这是个“裁判员”,它的存在是为了实现自动故障转移,比如主服务器突然宕机,镜像服务器和见证服务器一合计,“裁判”确认主服务器确实不行了,就会自动让镜像服务器接管,如果只有两台服务器,也可以不要见证,但那样就只能手动切换了,响应会慢一些。
关键点:这三台服务器必须能通过网络互相“说话”,防火墙要放行它们之间的通信端口(默认是5022)。
第二步:备份与还原,让数据“同步起点”
镜像不是凭空变出数据的,你需要先让镜像服务器上的数据库和主服务器的一模一样,怎么做呢?
- 在主服务器上,对你想要做镜像的数据库进行一次完整备份。
- 把这个备份文件拷贝到镜像服务器上。
- 在镜像服务器上,用RESTORE DATABASE命令还原这个备份,但这里有个至关重要的细节:还原时必须加上 WITH NORECOVERY 选项。(来源:SQL Server还原模式说明)这个选项的意思是,让数据库处于“正在还原”状态,准备好接收后续的日志备份,就像张开手臂准备接住后面传来的球一样,如果忘了这一步,后面所有操作都会失败。
第三步:配置端点,建立“专用电话线”
服务器之间要通过一个叫“端点”的东西来通信,你可以把它理解成一部专用的内部电话。
- 分别在主服务器和镜像服务器上执行创建端点的SQL语句,这里需要指定使用的端口(比如5022)和身份验证方式(推荐用Windows认证,最安全),这一步两边都要做,确保“电话号码”一致。
- 创建好后,用 *SELECT FROM sys.database_mirroring_endpoints** 这条命令查一下,确认端点已经成功创建并且是启动状态。
第四步:建立伙伴关系,握手成功
万事俱备,只欠东风,现在就让主服务器和镜像服务器正式“牵手”。
- 在镜像服务器上,先执行连接主服务器的命令,格式大致是这样的:
ALTER DATABASE [你的数据库名] SET PARTNER = 'TCP://主服务器IP地址:5022'这时你会发现镜像数据库还是“正在还原/已断开”的状态,这是正常的。 - 紧接着,马上切换到主服务器上,执行连接镜像服务器的命令:
ALTER DATABASE [你的数据库名] SET PARTNER = 'TCP://镜像服务器IP地址:5022'
当你执行完第二步,如果一切顺利,SQL Server Management Studio的图形界面里,你右键点击主数据库,选择“属性”再点到“镜像”页面,就会看到状态变成了“已同步”,并且出现了“故障转移”的按钮,恭喜你,这说明镜像关系已经成功建立了!
第五步:测试一下,看看“备胎”是否靠谱
搭建好了不测试,等于白搭,你可以尝试手动故障转移一下:
- 在镜像页面,直接点击“故障转移”按钮。
- 几秒钟后,你会发现原来的主服务器变成了镜像服务器,而原来的镜像服务器变成了主服务器,你的应用程序如果连接字符串配置正确(包含了故障转移伙伴信息),应该只会感觉到非常短暂的卡顿,然后就能继续正常工作了。
这个测试能让你心里彻底有底。
最后的小贴士
- 性能影响:镜像毕竟需要实时同步数据,会对主服务器产生一定的网络和I/O开销,在业务低峰期操作是明智的选择。
- 连接字符串:要让应用程序在故障时能自动切换到镜像服务器,你需要在程序的数据库连接字符串里加上
Failover Partner参数,指明镜像服务器的地址。 - 监控:你可以在系统视图
sys.database_mirroring里查看镜像的状态、是否同步延迟等信息。
看,是不是并没有想象中那么复杂?它更像是一个流程化的操作,每一步都有明确的意图,只要你胆大心细,一步步跟着做,完全有能力自己搞定这个提升数据库可靠性的“大杀器”。

本文由太叔访天于2026-01-14发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/80519.html
