Mất kết nối với máy chủ mysql trong khi truy vấn là gì?

Bạn có thể tránh hoàn toàn vấn đề bằng cách tinh chỉnh các truy vấn SQL của mình. Ví dụ: thay vì nối tất cả nội dung của hai bảng rất lớn, hãy thử lọc ra các bản ghi mà bạn không cần. Nếu có thể, hãy thử giảm số lần tham gia trong một truy vấn. Điều này sẽ có thêm lợi ích là làm cho truy vấn của bạn dễ đọc hơn. Đối với mục đích của tôi, tôi nhận thấy rằng việc chuẩn hóa nội dung thành các bảng làm việc có thể cải thiện hiệu suất đọc. Điều này tránh thời gian chờ

Viết lại truy vấn không phải lúc nào cũng là tùy chọn nên bạn có thể thử các giải pháp thay thế phía máy chủ và phía máy khách sau đây

Giải pháp phía máy chủ

Nếu bạn là quản trị viên cho máy chủ MySQL của mình, hãy thử thay đổi một số giá trị. Tài liệu MySQL đề xuất tăng giá trị net_read_timeout hoặc connect_timeout trên máy chủ

Giải pháp phía khách hàng

Bạn có thể tăng giá trị thời gian chờ của máy khách MySQL nếu bạn không có quyền truy cập quản trị viên vào máy chủ MySQL

MySQL Workbench
Bạn có thể chỉnh sửa tùy chọn Trình soạn thảo SQL trong MySQL Workbench.

  1. Trong menu ứng dụng, chọn Chỉnh sửa > Tùy chọn > SQL Editor
  2. Tìm phần Phiên MySQL và tăng giá trị thời gian chờ đọc kết nối DBMS
  3. Lưu cài đặt, thoát MySQL Workbench và mở lại kết nối

Điều chỉnh các biến thời gian chờ trong tệp cấu hình MySQL của bạn

Ngoài ra, nếu bạn đang sử dụng tệp cấu hình MySQL để kiểm soát cài đặt kết nối của mình thì bạn có thể chỉnh sửa tệp cấu hình my. cnf (Mac) được sử dụng bởi kết nối MySQL của bạn

Mở tệp cấu hình đó bằng trình soạn thảo văn bản bạn chọn và thử tìm các biến sau trong mysqld

[mysqld]
connect_timeout = 31536000
net_read_timeout = 31536000
wait_timeout = 28800
interactive_timeout = 28800

Các biến wait_timeout và Interactive_timeout không gây ra bất kỳ sự cố nào vì chúng thường có giá trị mặc định là 28800 giây (hoặc 8 giờ)

Để ngăn lỗi hết thời gian chờ, bạn cần tăng giá trị biến connection_timeout và net_read_timeout 

Loại lỗi này xảy ra khi kết nối giữa máy khách và máy chủ vượt quá giá trị thời gian chờ đã chỉ định

Ví dụ: nếu bạn có một truy vấn dài cần nhiều thời gian để hoàn thành việc thực thi, MySQL sẽ ngắt kết nối tới máy chủ

Lấy ví dụ, khi xuất một cơ sở dữ liệu lớn, tùy thuộc vào phương thức xuất và dữ liệu được xuất, quá trình này có thể mất nhiều thời gian để hoàn tất. Để ngăn chặn các sự cố trên máy chủ, MySQL có thể ngắt kết nối này trước khi quá trình hoàn tất

Một nguyên nhân phổ biến khác của loại lỗi này là các thao tác nối phức tạp

MySQL Hiển thị giá trị thời gian chờ

Như đã đề cập, bạn có thể khắc phục loại lỗi này bằng cách tăng thời lượng thời gian chờ ở phía máy chủ

Các giá trị thời gian chờ được lưu trữ trong các biến Wait_timeout và Interactive_timeout. Chúng tôi có thể tìm nạp các giá trị hiện tại như được hiển thị trong các truy vấn sau

mysql> hiển thị các biến toàn cục như 'interactive_timeout';

Kết quả đầu ra như sau

+---------------------+-------+
. tên_biến. Giá trị.
+---------------------+-------+
. Interactive_timeout. 28800.
+---------------------+-------+
1 . 00 giây)

Kết quả đã cho hiển thị giá trị mặc định của biến Interactive_timeout. Giá trị này xác định khoảng thời gian, tính bằng giây, mà máy chủ đợi một hoạt động trên một phiên đang hoạt động trước khi chấm dứt hoạt động đó

Chúng ta cũng có thể lấy giá trị của biến wait_timeout là

mysql> hiển thị các biến toàn cục như 'wait_timeout';

bảng kết quả

+---------------+-------+
. tên_biến. Giá trị.
+---------------+-------+
. chờ_thời gian chờ. 28800.
+---------------+-------+
1 hàng trong tập hợp (0. 01 giây)

Biến này đặt thời lượng mà máy chủ MySQL chờ một hoạt động trong phiên không tương tác

Khắc phục lỗi mất kết nối MySQL bằng cách cập nhật biến thời gian chờ

Để khắc phục loại lỗi này, chúng ta có thể cập nhật giá trị của hai biến đã thảo luận trước đó. Chúng ta có thể chạy truy vấn như sau

mysql> ĐẶT @@global. Interactive_timeout=43200;
Truy vấn OK, 0 hàng bị ảnh hưởng (0. 00 giây)

Lệnh trước sẽ cập nhật giá trị của biến Interactive_timeout thành 43200 giây

Để cập nhật tham số wait_timeout, hãy chạy lệnh sau

mysql> ĐẶT @@global. wait_timeout=43200;
Truy vấn OK, 0 hàng bị ảnh hưởng (0. 00 giây)

Bạn xong việc rồi. Bạn có thể thử chạy lại truy vấn đã hẹn giờ của mình

Phần kết luận

Trong bài đăng này, chúng tôi đã thảo luận về nguyên nhân gây ra lỗi mất kết nối khi làm việc với MySQL và các bước bạn có thể thực hiện để khắc phục chúng. Tuy nhiên, hãy chú ý đến các truy vấn của bạn hoặc phân đoạn chúng thành các khối hiệu quả

Tại sao truy vấn bị mất kết nối với máy chủ MySQL?

Lỗi trên thường xảy ra khi bạn chạy một truy vấn MySQL dài hoặc phức tạp kéo dài hơn vài giây . Để khắc phục lỗi, bạn có thể cần thay đổi cài đặt chung liên quan đến thời gian chờ trong máy chủ cơ sở dữ liệu MySQL của mình.

Làm cách nào để khắc phục thời gian chờ kết nối trong MySQL?

Mạng hỗ trợ . Log in to your server by using Secure Shell® (SSH). Sử dụng lệnh sudo để chỉnh sửa. cnf , tệp cấu hình MySQL®. Xác định vị trí cấu hình thời gian chờ và thực hiện các điều chỉnh phù hợp với máy chủ của bạn.