更新MySql.Data至8.0.27以上版本后无法连接MySQL数据库求助
.NET Framework 4.7.2 下 MySql.Data 8.0.27+ 连接失败问题排查与修复
常见问题原因及修复方案
1. TLS 协议版本不兼容
MySql.Data 8.0.27及以上版本默认强制使用TLS 1.2+,但部分旧版MySQL服务器(如5.7早期版本)未启用该协议,或者你的.NET Framework应用默认没开启TLS 1.2支持,导致握手失败。
修复操作:
- 在应用启动代码中添加TLS配置:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls13; - 或者在
app.config/web.config里配置:<configuration> <system.net> <settings> <servicePointManager securityProtocol="Tls12,Tls13" /> </settings> </system.net> </configuration>
2. 连接字符串参数校验变严格
新版驱动对连接字符串的参数校验更严格,比如旧版可省略的SslMode参数,现在必须明确指定,否则会触发连接错误。
修复操作:
- 给连接字符串添加
SslMode参数,根据服务器SSL配置选择对应值:- 服务器未开SSL:
SslMode=None - 需要SSL连接:
SslMode=Required
示例连接字符串:
Server=你的服务器地址;Database=你的数据库名;Uid=用户名;Pwd=密码;SslMode=None; - 服务器未开SSL:
3. 身份验证插件不匹配
MySQL 8.0默认用caching_sha2_password身份验证插件,若你的数据库用户仍使用旧的mysql_native_password,新版驱动可能无法正常验证。
修复操作:
- 切换数据库用户的身份验证插件:
ALTER USER '你的用户名'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES; - (仅测试/可控环境用)在连接字符串添加
AllowPublicKeyRetrieval=True参数,跳过部分验证(注意:此操作有安全风险)
4. 驱动依赖项缺失
8.0.27+版本的MySql.Data依赖MySqlConnector等组件,若NuGet安装时未同步拉取依赖,会导致运行时缺失组件报错。
修复操作:
- 卸载当前MySql.Data包,重新安装,确保所有依赖项(如
MySqlConnector、System.Buffers)都正确安装 - 检查项目的
packages.config或PackageReference,确认依赖版本和MySql.Data匹配
5. 系统级TLS配置未开启
.NET Framework 4.7.2本身支持TLS 1.2,但部分环境需要手动修改注册表开启:
- 32位系统注册表项:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001 - 64位系统注册表项:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001
内容的提问来源于stack exchange,提问作者Alfie
相关产品推荐
相关产品推荐

