MySql.Data.MySqlClient.MySqlException:超时已过期

Posted

技术标签:

【中文标题】MySql.Data.MySqlClient.MySqlException:超时已过期【英文标题】:MySql.Data.MySqlClient.MySqlException: Timeout expired 【发布时间】:2011-03-29 09:35:30 【问题描述】:

最近,我的网络应用程序中的特定页面抛出了

异常详情:mysql.Data.MySqlClient.MySqlException:超时 已到期。在完成之前超时时间已过 操作或服务器没有响应。

虽然我使用Ibtais作为持久层,但还是会出现这个错误。我已经重新启动了 MySql 服务实例,但仍然出现同样的错误。以前没有发生,但最近经常发生。

部署在服务器上的所有 Web 应用程序都使用 Ibatis,而 DB 服务器保持在安装 IIS 的同一台机器上。大约有 8000 条记录,其中大约 300 到 500 条将在页面加载时被过滤

对问题原因有什么见解吗?

【问题讨论】:

您的 CommandTimeout 参数是否设置在您的连接字符串中?也许你可以增加价值? @Nathan 不!是以秒为单位还是以毫秒为单位? 我相信毫秒。我的 MySQL 连接字符串中有 CommandTimeout=30000。 我只是在看这个,根据文档,CommandTimeout 以秒为单位,而不是毫秒。只是觉得有人可能想知道。见25.2.3.1.11. CommandTimeout on dev.mysql.com。 但是this page 确实显示了连接字符串设置是在几秒钟内使用的。 【参考方案1】:

您可以将命令超时设置为 0,但这不是一个好主意。有些请求可能会无限期地进行。

首先存在导致查询超时的潜在问题。您是否在插入、更新或以任何方式使用会锁定表的大型二进制值?这是我在如此少量的数据上看到此类错误的最常见原因。

【讨论】:

【参考方案2】:

我遇到了同样的问题,我发现了这个MySQLConnection--Specifying default command timeout。

只需将“default command timeout=xxx”添加到您的 connectString 中,该键的值以秒为单位。 我试过了,它对我有用。

【讨论】:

【参考方案3】:

让你的连接字符串看起来像这样:

DotNet 框架:

<add key="MYSQL_CONNECTION_STRING_RDS" value="Uid=userid;Password=pass;
     Server=localhost;Port=3306;
     Database=dbname;default command timeout=0;SslMode=none" 
/>

点网核心

"MYSQL_CONNECTION_STRING_RDS": 
    "ConnectionString": "Server=localhost;Database=dbname;user=userid;password=pass;default command timeout=0;",
    "ServerVersion": "8.0.22"
  

【讨论】:

以上是关于MySql.Data.MySqlClient.MySqlException:超时已过期的主要内容,如果未能解决你的问题,请参考以下文章