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.
- Trong menu ứng dụng, chọn Chỉnh sửa > Tùy chọn > SQL Editor
- Tìm phần Phiên MySQL và tăng giá trị thời gian chờ đọc kết nối DBMS
- 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ả