【发布时间】:2020-11-16 07:56:27
【问题描述】:
我在 Linux ubuntu 上使用带有 C# 的 mysql 5.7.31
当我以编程方式删除一个大表或删除一个数据库时,我得到这个超时
Stack=MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal error encountered during command execution.
---> MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal error encountered attempting to read the resultset.
---> MySql.Data.MySqlClient.MySqlException (0x80004005): Reading from the stream has failed.
---> System.IO.IOException: Unable to read data from the transport connection: Connection timed out.
---> System.Net.Sockets.SocketException (110): Connection timed out
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at MySql.Data.MySqlClient.TimedStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)
at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
为了解决这个问题我已经尝试过
- 我将此添加到我的连接字符串中
连接超时=60
- 我将此添加到我的 mysqld.cnf,重新启动并检查它是否显示变量。日志文件显示它在 42 秒后超时。
connect_timeout=60000 交互超时=60000 wait_timeout=60000
我认为问题是“无法从传输连接中读取数据:连接超时。”
但不确定需要更改哪个变量来解决此问题?
谢谢
【问题讨论】:
-
增加数字甚至更高,直到你没有超时
-
我将它设置为 60 秒,日志说它在 40 秒后超时。所以显然我所做的更改并没有影响系统。
-
dot net 也有超时,但是你应该检查进程列表中是否有进程正在阻塞,因为 drop 应该很快并且增加 60 秒以上
-
我的猜测是我所做的更改对于传输异常超时不正确。我更改的变量是否正确?
-
tzhe ysql 连接器的超时时间与服务器的超时时间相同,如果您不知道是哪个罪魁祸首,请将 n 双方的超时时间增加到 35000000 看看是什么出来,但逐渐增加所有超时时间,你会发现哪个正在阻止连接。同样,当您启用通用锁定时,您会看到删除实际需要多长时间。
标签: mysql