使用Pomelo.EntityFrameworkCore.MySql v6跨设备连接MySQL失败问题
跨设备连接MySQL数据库失败排查(Pomelo.EntityFrameworkCore.MySql v6)
问题场景
本地机器使用Pomelo.EntityFrameworkCore.MySql v6连接MySQL数据库正常,但同一网络下的其他设备连接时报错,错误信息如下:
MySqlConnector.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts. at MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, MySqlConnection connection, Int32 startTickCount, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 433 at MySqlConnector.Core.ConnectionPool.ConnectSessionAsync(MySqlConnection connection, String logMessage, Int32 startTickCount, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ConnectionPool.cs:line 363 at MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection connection, Int32 startTickCount, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ConnectionPool.cs:line 94 at MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection connection, Int32 startTickCount, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ConnectionPool.cs:line 124 at MySqlConnector.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Int32 startTickCount, Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlConnection.cs:line 915 at MySqlConnector.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlConnection.cs:line 406 at MySqlConnector.MySqlConnection.Open() in /_/src/MySqlConnector/MySqlConnection.cs:line 369 at Microsoft.EntityFrameworkCore.ServerVersion.AutoDetect(String connectionString) at MadaSoft.AddDbContextHostBuilderExtensions.<>c__DisplayClass1_0.<GetMySql>b__0(DbContextOptionsBuilder o) in D:\VS Projects\MadaProject\MadaSoft\HostBuilder\AddDbContextHostBuilderExtensions.cs:line 32 at MadaSoft.ContextFactoryApp.CreateDbContext() in D:\VS Projects\MadaProject\MadaSoft\_DbContext\ContextFactoryApp.cs:line 19 at MadaSoft.App.MigrateContextApp() in D:\VS Projects\MadaProject\MadaSoft\App.xaml.cs:line 63 at MadaSoft.App.OnStartupTask() in D:\VS Projects\MadaProject\MadaSoft\App.xaml.cs:line 55 at MadaSoft.App.OnStartup(StartupEventArgs e) in D:\VS Projects\MadaProject\MadaSoft\App.xaml.cs:line 35
服务注册代码:
Action<DbContextOptionsBuilder> configureDbContext = o => { o.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)); o.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); }; services.AddDbContext<ContextApp>(configureDbContext); services.AddSingleton(new ContextFactoryApp(configureDbContext));
使用的连接字符串:server=localhost; Port=3306; Database=dbName; Uid=root; Pwd=root; sslmode=none; CharSet=utf8;
排查步骤
1. 修正连接字符串的服务器地址
当前连接字符串中server=localhost仅指向本地回环地址,其他设备无法解析到数据库服务器。需替换为数据库所在机器的局域网IP地址(如192.168.1.100):
server=192.168.x.x; Port=3306; Database=dbName; Uid=root; Pwd=root; sslmode=none; CharSet=utf8;
2. 检查MySQL服务的IP绑定设置
MySQL默认可能仅绑定127.0.0.1,限制本地访问:
- 找到MySQL配置文件(Windows为
my.ini,Linux为my.cnf) - 修改
bind-address参数为0.0.0.0(允许所有IP访问),或指定具体的局域网IP段 - 修改后重启MySQL服务生效
3. 授权数据库用户的跨IP访问权限
当前root用户可能仅允许本地登录,需授权其从其他IP访问:
-- 允许root从任意IP访问指定数据库 GRANT ALL PRIVILEGES ON dbName.* TO 'root'@'%' IDENTIFIED BY 'root'; -- 刷新权限使设置生效 FLUSH PRIVILEGES;
注:
%表示允许所有IP,也可指定具体IP(如192.168.%.%)提升安全性
4. 排查防火墙/安全软件拦截
- 数据库所在机器的防火墙需开放3306端口,添加允许同网络设备访问的入站规则
- 临时关闭杀毒软件、安全防护工具,测试是否能正常连接,排除软件拦截问题
5. 验证网络连通性
在客户端设备上执行以下命令:
- 测试服务器IP可达性:
ping 192.168.x.x - 测试3306端口开放状态:
telnet 192.168.x.x 3306或nc -zv 192.168.x.x 3306 - 确认客户端与服务器处于同一局域网,无VLAN隔离等网络限制
内容的提问来源于stack exchange,提问作者eng_hr.ye
相关产品推荐
相关产品推荐

