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:超时已过期的主要内容,如果未能解决你的问题,请参考以下文章