【发布时间】:2020-08-25 21:31:04
【问题描述】:
我有一个长时间运行的查询,从 MySQL 普通客户端完成大约需要 1 分钟。
但是,当我在我的 C# 应用程序中运行它时,尽管在连接字符串中将其设置为 240 秒,但 30 秒后似乎出现标准 MySQL 连接超时错误。
我找不到其他超时设置吗?
错误信息
异常:“在命令执行期间遇到致命错误。”
InnerException:“从流中读取失败。”
InnerException: "Unable to read data from the transport connection: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应。"
代码
public static string GetMySQLconnectionString()
{
MySqlConnectionStringBuilder conn_string = new MySqlConnectionStringBuilder();
conn_string.Server = "127.0.0.1";
conn_string.Port = 4302;
conn_string.UserID = "root";
conn_string.Password = "";
conn_string.Database = "my_database";
conn_string.CharacterSet = "utf8";
conn_string.SslMode = MySqlSslMode.None;
conn_string.ConnectionTimeout = 240;
return conn_string.ToString();
}
internal static string getTotalSitesThatStillNeedDNSChecking()
{
try
{
using (MySql.Data.MySqlClient.MySqlConnection dbConnUpdate = new MySql.Data.MySqlClient.MySqlConnection(GetMySQLconnectionString()))
{
dbConnUpdate.Open();
MySqlCommand command = dbConnUpdate.CreateCommand();
command.CommandText = "SELECT count(*) as counter FROM all_domains WHERE last_dns_check IS NULL";
MySqlDataReader reader = command.ExecuteReader();
if (!reader.HasRows) return "0";
reader.Read();
return (string)reader["counter"].ToString();
}
}
catch (Exception ex) { Logger.AddError("error - ", ex, "grand-total-stat-calculator"); return "0"; }
}
【问题讨论】:
-
您遇到的是连接失败,而不是实际查询超时。而不是使用 127.0.0.1 使用计算机的 IP 或计算机名称。并非所有机器都配置为环回 IP 地址 127.0.0.1。你是在 OPEN 还是 SELECT 上失败了?
-
谢谢,但我可以看到 SQL 查询正在运行,但它只是在 30 秒后抛出该错误,所有其他查询都可以正常运行,只是运行时间不长
-
该命令的默认超时时间为 30 秒。更改命令超时。
-
尝试将本地ip改为“localhost”
-
ConnectionTimeout仅为初始连接设置超时,而不为在该连接上执行的任何后续命令设置超时。