.NET 6环境下使用Dapper连接MySQL失败求助
排查.NET 6 MVC中MySql.Data 8.1.0连接MySQL的认证错误
可能的排查方向及解决方案
1. 确认MySQL用户的认证插件兼容性
MySQL 8.0+默认使用caching_sha2_password认证插件,部分场景下MySql.Data驱动连接时会出现适配问题:
- 登录MySQL执行以下SQL,查看
root@localhost的认证插件:SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; - 如果插件是
caching_sha2_password,有两种解决方式:- (测试环境推荐)修改用户为
mysql_native_password插件:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES; - 生产环境保留
caching_sha2_password,在连接字符串中添加SSL配置:"ConnectionString": "server=localhost;port=3306;database=test;user=root;password=root;SslMode=Required;"
- (测试环境推荐)修改用户为
2. 补充连接字符串的必要参数
MySql.Data 8.x版本需要显式开启公钥获取权限,避免认证失败:
修改appsettings.json中的连接字符串,添加AllowPublicKeyRetrieval=True:
"ConnectionString": "server=localhost;port=3306;database=test;user=root;password=root;AllowPublicKeyRetrieval=True;SslMode=Preferred;"
3. 验证MySQL用户的数据库权限
即使账号密码正确,root@localhost可能没有访问test数据库的权限:
- 执行SQL检查权限:
SHOW GRANTS FOR 'root'@'localhost'; - 如果没有
test数据库的权限,执行授权命令:GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost'; FLUSH PRIVILEGES;
4. 排查自定义MySqlDBHelper的实现问题
你的代码中使用了自定义的MySqlDBHelper,需确认其GetSqlConnection()方法是否正确初始化连接对象:
可以临时替换为直接创建连接进行测试,排除Helper类的问题:
[HttpGet("Add")] public object Add(string FileName, string FilePath,string ImageUrl) { var connStr = app.Configuration["ConnectionString"]; var sql = "INSERT INTO image_info (FileName, FilePath, ImageUrl) VALUES (@FileName, @FilePath, @ImageUrl)"; using var conn = new MySqlConnection(connStr); conn.Open(); var result = conn.Execute(sql, new { FileName, FilePath, ImageUrl }); return Ok(); }
5. 检查端口连通性与防火墙设置
- 确认3306端口未被占用:使用
Test-NetConnection localhost -Port 3306(PowerShell)或telnet localhost 3306测试端口是否可连通。 - 检查本地防火墙是否拦截了.NET程序访问3306端口,必要时添加放行规则。
内容的提问来源于stack exchange,提问作者user22299445
相关产品推荐
相关产品推荐

