Hướng dẫn mysql data mysqlclient mysqlexception 0x80004005: timeout expired - dữ liệu mysql mysqlclient mysqlexception 0x80004005: hết thời gian chờ

16

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Trong thời gian gần đây, một trang cụ thể trong ứng dụng web của tôi đã ném

Chi tiết ngoại lệ: mysql.data.mysqlclient.mysqlexception: hết thời gian hết hạn. Thời gian chờ đã trôi qua trước khi hoàn thành thao tác hoặc máy chủ không phản hồi.

Mặc dù tôi sử dụng IBTAIS làm lớp kiên trì, lỗi này xảy ra. Tôi đã khởi động lại thể hiện dịch vụ MySQL nhưng tôi gặp phải lỗi tương tự. Nó đã không xảy ra sớm hơn nhưng xảy ra thường xuyên trong thời gian gần đây.

Tất cả các ứng dụng web được triển khai trên máy chủ đều sử dụng IBATIS và máy chủ DB vẫn còn trên cùng một máy nơi IIS được cài đặt. Có khoảng 8000 bản ghi trong đó khoảng 300 đến 500 sẽ được lọc trên tải trang

Bất kỳ hiểu biết nào cho nguyên nhân của vấn đề?

Hướng dẫn mysql data mysqlclient mysqlexception 0x80004005: timeout expired - dữ liệu mysql mysqlclient mysqlexception 0x80004005: hết thời gian chờ

Gilad Green

36.1k7 Huy hiệu vàng55 Huy hiệu bạc90 Huy hiệu Đồng7 gold badges55 silver badges90 bronze badges

Hỏi ngày 13 tháng 8 năm 2010 lúc 10:08Aug 13, 2010 at 10:08

8

Tôi đã gặp phải vấn đề tương tự với của bạn và tôi thấy mySQLConnection này-thời gian chờ lệnh mặc định.

Chỉ cần thêm "thời gian chờ lệnh mặc định = xxx" vào ConnectString của bạn, giá trị của khóa này là trong vài giây. Tôi đã thử và nó làm việc cho tôi.default command timeout=xxx" into your connectString, this key's value is in seconds.
I tried and it worked for me.

Đã trả lời ngày 17 tháng 7 năm 2013 lúc 9:58Jul 17, 2013 at 9:58

RavenravenRaven

4164 Huy hiệu bạc7 Huy hiệu đồng4 silver badges7 bronze badges

Bạn có thể đặt thời gian chờ lệnh thành 0, mặc dù đó không phải là một ý kiến ​​hay. Một số yêu cầu có thể đi vô thời hạn.

Có một vấn đề cơ bản đang khiến các truy vấn hết thời gian ngay từ đầu. Bạn đang chèn, cập nhật hoặc bằng bất kỳ cách nào làm việc với các giá trị nhị phân lớn sẽ khóa bảng? Đó là lý do phổ biến nhất tôi thấy một lỗi như thế này trên một lượng nhỏ dữ liệu như vậy.

Đã trả lời ngày 6 tháng 7 năm 2012 lúc 0:02Jul 6, 2012 at 0:02

Hướng dẫn mysql data mysqlclient mysqlexception 0x80004005: timeout expired - dữ liệu mysql mysqlclient mysqlexception 0x80004005: hết thời gian chờ

DabloonsdabloonsDabloons

1.4321 Huy hiệu vàng17 Huy hiệu bạc29 Huy hiệu đồng1 gold badge17 silver badges29 bronze badges

Làm cho chuỗi kết nối của bạn trông như thế này:

DotNet Framework:


Dotnet Core

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

Đã trả lời ngày 20 tháng 10 năm 2021 lúc 13:53Oct 20, 2021 at 13:53

Hướng dẫn mysql data mysqlclient mysqlexception 0x80004005: timeout expired - dữ liệu mysql mysqlclient mysqlexception 0x80004005: hết thời gian chờ

JeuvinjeuvinJEuvin

6631 Huy hiệu vàng8 Huy hiệu bạc28 Huy hiệu đồng1 gold badge8 silver badges28 bronze badges

Hướng dẫn mysql data mysqlclient mysqlexception 0x80004005: timeout expired - dữ liệu mysql mysqlclient mysqlexception 0x80004005: hết thời gian chờ

MySQLEXception (0x80004005): Thời gian chờ lệnh đã hết hạn trước khi hoạt động hoàn thành

Tối nay tất cả đã cố gắng loại bỏ một số màn hình tử thần màu vàng ASP.NET MVC (YSOD) do MySQL Timing Out.

Hướng dẫn mysql data mysqlclient mysqlexception 0x80004005: timeout expired - dữ liệu mysql mysqlclient mysqlexception 0x80004005: hết thời gian chờ

Tiểu sử

Ứng dụng của tôi là một ứng dụng web ASP.NET MVC 5 khá cũ được sử dụng để nói chuyện với một phiên bản cục bộ của MySQL và hiện đã được chuyển đám mây (AWS) với cơ sở dữ liệu MySQL được di chuyển để sử dụng dịch vụ cơ sở dữ liệu MySQL của Amazon Aurora Serverless.

Tôi có một vài trong số này bây giờ. Họ phù hợp với khối lượng công việc nhất định và môi trường phát triển của tôi rất tốt.

Thời gian chờ

Một trang trong ứng dụng của tôi khá nặng, không phải là vấn đề nhưng sẽ mất một chút thời gian để tải. Sau khi di chuyển đến cơ sở dữ liệu MySQL AWS Aurora Serverless, tôi bắt đầu nhận được một số thời gian chờ không liên tục.

Tôi cũng sẽ nhận được:

MySqlException (0x80004005): The Command Timeout expired before the operation completed

[MySqlException (0x80004005): The Command Timeout expired before the operation completed.]
 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
 MySqlConnector.Protocol.Serialization.d__2.MoveNext() +690
 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
 MySqlConnector.Protocol.Serialization.ProtocolUtility.ReadPacketAsync(BufferedByteReader bufferedByteReader, IByteHandler byteHandler, Func`1 getNextSequenceNumber, ProtocolErrorBehavior protocolErrorBehavior, IOBehavior ioBehavior) +191
 MySqlConnector.Protocol.Serialization.ProtocolUtility.DoReadPayloadAsync(BufferedByteReader bufferedByteReader, IByteHandler byteHandler, Func`1 getNextSequenceNumber, ArraySegmentHolder`1 previousPayloads, ProtocolErrorBehavior protocolErrorBehavior, IOBehavior ioBehavior) +61
 MySqlConnector.Protocol.Serialization.StandardPayloadHandler.ReadPayloadAsync(ArraySegmentHolder`1 cache, ProtocolErrorBehavior protocolErrorBehavior, IOBehavior ioBehavior) +54
 MySqlConnector.Core.ServerSession.ReceiveReplyAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) +80
 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
 MySqlConnector.Core.d__78.MoveNext() +737
 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
 System.Threading.Tasks.ValueTask`1.get_Result() +80
 MySqlConnector.Core.d__2.MoveNext() +346

or:

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

[SocketException (0x274c): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond]
 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) +94
 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +130

[IOException: Unable to read data from the transport connection: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.]
 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +290
 System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count) +32
 System.Net.Security._SslStream.StartFrameHeader(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) +137
 System.Net.Security._SslStream.StartReading(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) +171
 System.Net.Security._SslStream.ProcessRead(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) +270
 System.Net.Security.SslStream.Read(Byte[] buffer, Int32 offset, Int32 count) +35
 MySqlConnector.Utilities.Utility.Read(Stream stream, Memory`1 buffer) +59
 MySqlConnector.Protocol.Serialization.StreamByteHandler.g__DoReadBytesSync|6_0(Memory`1 buffer_) +101

Dung dịch

Sau khi Google nhanh chóng, tôi đã có thể cải thiện tình huống với (0x80004005): Ngoại lệ thời gian chờ lệnh bằng cách nói với trình điều khiển mysqlconnector.net để tăng thời gian chờ bằng cách thêm điều này vào chuỗi kết nối trong đó thời gian chờ trong vài giây:

default command timeout=120

Vì tôi cũng sử dụng Servicestack.ormlite để nói chuyện với lớp dữ liệu của mình, tôi cũng có thể đã thêm OrmLiteConfig.CommandTimeout = 120; vào mã của mình nhưng chuyển sang Web.Config dường như là một giải pháp gọn gàng hơn.

Điều đó khiến cho một nỗ lực kết nối hiếm hoi nhưng có thể lặp lại đã thất bại vì lỗi thời gian chờ của bên được kết nối, đó là khi nhìn vào một số mã khác nói chuyện với cơ sở dữ liệu không có máy chủ AWS Aurora MySQL mà tôi nhận thấy các chuỗi kết nối có được bổ sung:

SslMode=none

Vì vậy, tôi quyết định thử điều đó và dường như nó đã hoạt động!

Success?!

Có lẽ đây là một số kỳ lạ của cơ sở dữ liệu không có máy chủ Amazon Aurora hoặc có lẽ lỗi vẫn sẽ xuất hiện lại nhưng hiện tại nó dường như đã hoạt động.

Vì vậy, điều này cho những người khác và cho tôi trong tương lai là chuỗi kết nối mà tôi đã sử dụng

 key="MYSQL_CONNECTION_STRING_RDS" value="Uid=userid;Password=pass;Server=auroa-mysql-rds.cluster-random.eu-west-1.rds.amazonaws.com;Port=3306;Database=dbname;default command timeout=120;SslMode=none" />

Thành công 🎉