C#使用计算机名作为Host连接MySQL失败如何解决?
问题原因
- 主机名解析协议不匹配:你的计算机名
COMP-18TN默认被解析为IPv6本地回环地址::1,但MySQL服务配置仅绑定了IPv4地址127.0.0.1,未监听IPv6地址导致连接失败。MySQL Workbench会自动适配IPv4/IPv6协议,因此可以正常连接,而C#使用的MySQL连接器默认优先走IPv6解析。 - 连接字符串参数缺失:新版本的MySQL官方连接器默认开启SSL连接校验,本地部署的MySQL默认未开启SSL配置,用本地主机名连接时会触发SSL校验失败,而
localhost/127.0.0.1默认会跳过SSL校验规则。 - 本地DNS解析异常:系统的hosts文件没有配置计算机名到本地回环地址的映射,导致计算机名被解析到了其他非本地IP。
解决方案
方案1:调整连接字符串参数
直接在原有连接字符串中添加UseIPv6=false强制使用IPv4解析主机名,同时添加SslMode=None关闭SSL校验即可,修改后的代码如下:
string host = "COMP-18TN"; string DatabaseName = "Cars_DB"; string UserName ="root_name"; string Password ="pass"; string connString = string.Format("Server={0}; Port=3306; database={1}; UID={2}; password={3}; SslMode=None; UseIPv6=false;", host, DatabaseName, UserName, Password); MySqlConnection conn = new MySqlConnection(connString); try { conn.Open(); } catch (Exception e) { MessageBox.Show(e.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
方案2:修改MySQL监听配置
找到MySQL配置文件my.ini(Windows)或my.cnf(Linux),修改bind-address参数为0.0.0.0(监听所有IPv4地址)或者同时配置监听IPv6地址,修改完成后重启MySQL服务即可。
方案3:修改本地hosts映射
- 用管理员权限打开记事本,打开路径
C:\Windows\System32\drivers\etc\hosts文件 - 在文件末尾添加一行:
127.0.0.1 COMP-18TN - 保存文件后,打开cmd执行
ipconfig /flushdns刷新DNS缓存,再重新运行代码即可。
可选排查项
如果以上方案都无效,可执行MySQL命令SELECT host,user FROM mysql.user WHERE user='root_name';确认你的数据库账号允许从COMP-18TN主机登录,若没有对应权限可执行授权命令:GRANT ALL PRIVILEGES ON Cars_DB.* TO 'root_name'@'COMP-18TN'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者user6223604
相关产品推荐
相关产品推荐

