mysql - Pomelo MySqlException:无法连接到任何指定的 MySQL 主机
问题描述
我正在开发需要在 Ubuntu Linux 18.04LTS 服务器上运行的 Blazor 服务器端项目。(注意:这个项目没有使用 Web Assembly。)
我正在使用 C# 和Pomelo.EntityFrameWorkCode.MySql
nuget 包 (v3.1.1) 连接到在 Linux 服务器上运行的 MySQL 数据库。
当我在我的 Windows 开发系统上本地运行该应用程序时,一切正常。当我将文件发布到 Linux 服务器时,它大约有 5% 的时间工作 - 其余的我收到一条错误消息
Pomelo MySqlException:无法连接到任何指定的 MySQL 主机
我在我的 Windows 系统和 Linux 服务器上都连接到同一个 MySQL 数据库。MySQL 在 Linux 上运行,正确的端口是打开的,等等。
更详细的错误信息是:
处理请求时发生未处理的异常。MySqlException:无法连接到任何指定的 MySQL 主机。C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs 中的 MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancelToken),第 442 行
InvalidOperationException:引发了一个异常,可能是由于暂时性故障。考虑通过将“EnableRetryOnFailure()”添加到“UseMySql”调用来启用瞬时错误恢复能力。Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute(TState 状态,Func 操作,Func> verifySucceeded)
MySqlException:无法连接到任何指定的 MySQL 主机。C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection 连接,IOBehavior ioBehavior 中的 MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs,ILoadBalancer loadBalancer,IOBehavior ioBehavior,CancellationTokencancellationToken) , CancellationToken cancelToken) in > C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionPool.cs MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection connection, IOBehavior ioBehavior, CancellationToken cancelToken) in > C:\projects\mysqlconnector\src\ MySqlConnector\Core\ConnectionPool.cs System.Threading.Tasks.ValueTask.get_Result() System.Runtime.CompilerServices。
System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable+ConfiguredValueTaskAwaiter.GetResult() MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable ioBehavior, CancellationToken cancelToken) 在 C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs MySql.Data.MySqlClient.MySqlConnection.Open() 在 C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(bool errorsExpected) Microsoft.EntityFrameworkCore.Storage .RelationalConnection.Open(bool errorsExpected)
Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(布尔错误预期)
Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject) Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable+Enumerator.InitializeReader(DbContext _, bool result) Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute(TState state, Func操作,Func> verifySucceeded)
Startup 类中的配置如下所示:
services.AddDbContext<LabDataDbContext>(options => {
options.UseMySql(Configuration.GetConnectionString("LabDbConnection"));
options.EnableDetailedErrors();
});
我的连接字符串是:
"server=server.grafton.internal;port=3306;database=labdb;user=******;password=******;charset=utf8"
有趣的是我可以使用 MySQL Workbench 并使用完全相同的凭据从我的 Windows 开发系统或 Linux 服务器连接到数据库。
此应用程序设计为仅在内部运行,并且运行该应用程序的服务器在 Internet 上不可见,因此我不太关心安全问题(如果有人想知道一群自闭症儿童有什么设备和活动,他们可以拥有它!!)
在尝试隔离错误时,我已将应用程序完全删除并重新部署到网络上的不同 linux 服务器,结果相同,但正如我之前所说,大约 5% 的时间,应用程序在 linux 上按预期工作服务器。
应用程序中不使用数据库的其他页面工作正常,所以我认为这不是 Web 服务器的问题(NGinx 作为 Kestrel 的反向代理)。
我还想强调,该应用程序大约 5% 的时间在 linux 上运行,100% 的时间在 Windows 上运行——两者都连接到在 linux 上运行的同一个 MySQL 服务器。
如果需要更多代码示例,该应用程序位于 Github 上,地址为https://github.com/SteveTeece/Lab。
这个让我难住了。非常感谢有关如何解决此问题并使其在 Linux 服务器上运行的任何想法。
谢谢
解决方案
感谢大家的反馈和评论。
经过几天的摆弄,我已经通过使用解决了这个问题
Server=localhost;
在生产连接字符串而不是 FQDN 中。
推荐阅读
- c - 为什么 snprintf 复制不同的值,即使每次都将相同的变量复制到字符串数组
- c - 由于添加了一个小的二维数组而导致的分段错误
- javascript - 更改 .innerHTML 中的链接颜色
- python - 如何在 Python 中访问字符串中的某些值
- android - 使用 Node.JS 向 Firebase 发出 HTTPS 请求
- c++ - 如果基类指针不能访问派生类成员函数,那么多态有什么方便呢?
- javascript - 为什么在这种情况下会发生 Stale Element 异常?
- mysql - 为什么我会在特定范围内收到错误代码:1292?
- css - CSS 忽略父选择器
- jquery - 只要输入字段有效,其他元素就会获得焦点