使用Azure SQL故障转移组时,正确的连接字符串该如何配置?
正确配置Azure SQL故障转移组的连接字符串
这是Azure SQL故障转移组使用中很常见的配置误区,我来给你拆解正确的做法:
核心结论
使用故障转移组的虚拟服务器名作为Server参数,同时User ID必须指定原始逻辑服务器名(也就是你创建故障转移组时的主服务器,比如mydatabase1),而非故障转移组的虚拟名。
正确的连接字符串
Server=tcp:mydatabase.database.windows.net;Database=mySqlDatabase;User ID=MyUser@mydatabase1;Password=myPassword;Trusted_Connection=False;Encrypt=True;
为什么之前的配置会失败?
- 当你尝试
User ID=MyUser@mydatabase时,Azure会尝试在名为mydatabase的逻辑服务器上查找该登录名,但mydatabase.database.windows.net只是故障转移组的虚拟入口,并不是实际存在的逻辑服务器,因此会返回“数据库不可用”的错误。 - 而你用
User ID=MyUser@mydatabase1能成功连接,是因为这个登录名绑定到实际逻辑服务器mydatabase1,但如果只指定单个服务器名,故障转移后就需要手动修改连接字符串,完全失去了故障转移组的自动路由作用。
为什么这个配置能实现自动故障转移?
故障转移组会自动同步主服务器上的登录名、权限到次要服务器(mydatabase2),所以MyUser@mydatabase1这个登录名在mydatabase2上也会存在且有效。当故障转移发生时,虚拟服务器名mydatabase.database.windows.net会自动路由到当前的主服务器(无论是mydatabase1还是mydatabase2),你的连接字符串不需要任何修改就能正常连接。
额外注意
如果后续你需要调整故障转移组的主服务器,只需要确保User ID对应的是故障转移组最初配置时的主服务器登录名(或者已经同步到所有成员服务器的登录名)即可,无需调整连接字符串的其他部分。
内容的提问来源于stack exchange,提问作者JKennedy
相关产品推荐
相关产品推荐

