Làm cách nào để tăng giới hạn thời gian chờ kết nối mysql?

Một kết nối MySQL liên kết (kết nối) Bàn làm việc với máy chủ MySQL. Hầu hết các hành động được thực hiện trong Workbench sau đó được thực hiện đối với máy chủ MySQL được kết nối. Mỗi kết nối MySQL chứa tập hợp các định nghĩa riêng, vì vậy bạn có thể xác định nhiều kết nối MySQL trong Workbench. Ví dụ: các kết nối có thể kết nối với các máy chủ MySQL khác nhau hoặc cùng một máy chủ MySQL với các tên người dùng khác nhau hoặc bật SSL cho một máy chủ hoặc bạn có thể thiết lập kết nối với máy chủ MySQL từ xa (trên máy chủ lưu trữ web của bạn?) bằng SSH

Đối với nhiều kết nối đến cùng một máy chủ MySQL cục bộ, bạn có thể có một kết nối sử dụng "root" với một kết nối khác sử dụng người dùng ít đặc quyền hơn. Tùy thuộc vào cách bạn thiết lập người dùng, họ có thể (hoặc không) đều có quyền xem và sử dụng cùng một cơ sở dữ liệu (thông tin). Ví dụ: bạn có thể sử dụng Workbench để định cấu hình và sử dụng người dùng ít đặc quyền hơn mà bạn sử dụng cho ứng dụng web của mình

Vì vậy, để tóm tắt, các kết nối chỉ cần kết nối với máy chủ MySQL. Nếu hai kết nối sử dụng cùng một thông tin chính xác thì kết quả trong Workbench sẽ giống hệt nhau, mặc dù đây không phải là trường hợp sử dụng phổ biến. Để biết thêm thông tin về kết nối MySQL trong MySQL Workbench, hãy xem Chương 5, Kết nối trong MySQL Workbench

Bạn có thể tự hỏi liệu người dùng của bạn có thể làm chậm hoặc thậm chí DOS cơ sở dữ liệu MySQL của bạn với một yêu cầu không may mắn hay không. Nếu nó chỉ chứa sai số lượng điều kiện trong biểu mẫu tìm kiếm nâng cao của bạn, kích hoạt quá trình quét toàn bộ bảng trên tập dữ liệu lớn hơn nhiều so với bạn dự đoán thì có thể họ có thể

Nếu bạn cung cấp chức năng tìm kiếm nâng cao, thống kê tổng hợp, báo cáo hoặc xuất dữ liệu trong ứng dụng của mình, thì truy vấn chạy dài không thường xuyên là một phần của thiết kế. Bạn có thể chưa bị quá tải và chậm cơ sở dữ liệu, chỉ vì người dùng của bạn không thường xuyên sử dụng các tính năng này

Cho đến MySQL 5. 7, bạn không có cách nào dễ dàng để tự bảo vệ mình khỏi một lượng lớn người dùng DDoS cơ sở dữ liệu của bạn bằng các truy vấn dài. Ngoài ra, PHP max_execution_time không áp dụng cho việc chờ các cuộc gọi mạng như được hiển thị trong bài đăng trên blog trước đây trên max_execution_time. Điều này có nghĩa là các tập lệnh PHP và kết nối MySQL của bạn có thể bị chặn miễn là truy vấn chạy, trường hợp xấu nhất là vài phút hoặc vài giờ

Khi bạn Google vấn đề này, giải pháp được đề xuất là chạy một daemon hoặc cronjob theo dõi danh sách quy trình và chỉ loại bỏ các truy vấn chạy dài. Điều này chắc chắn hoạt động, nhưng bạn không biết ai đang chạy truy vấn và tại sao, điều này ngăn bạn áp dụng thời gian chờ chi tiết hơn dựa trên ngữ cảnh (ví dụ: web so với quy trình nền)

Với MySQL5. 7, giờ đây bạn có thể sử dụng gợi ý truy vấn trình tối ưu hóa mới cho các truy vấn SELECT trong Mili giây

SELECT /*+ MAX_EXECUTION_TIME(1000) */ status, count(*) FROM articles GROUP BY status ORDER BY status; 

Hoặc bạn có thể thiết lập một

SET SESSION MAX_EXECUTION_TIME=2000; SET GLOBAL MAX_EXECUTION_TIME=2000; 

Thời gian chờ chỉ áp dụng cho các truy vấn CHỌN chỉ đọc

Nếu truy vấn của bạn mất nhiều thời gian, nó sẽ không thành công với lỗi sau

ERROR 3024 (HY000): Query execution was interrupted, maximum statement execution time exceeded 

Bạn có thể xử lý lỗi này một cách tập trung trong ứng dụng của mình và hiển thị thông báo cho người dùng rằng phản hồi mất quá nhiều thời gian và đã bị hủy bỏ

Sử dụng phần mềm Theo dõi ngoại lệ (chẳng hạn như Tideways), bạn có thể ghi nhật ký người dùng, giao dịch hoặc trang nào đang khiến các truy vấn này bị hủy bỏ, tần suất chúng xảy ra và liệu hiệu suất truy vấn có thể được cải thiện hay không

Khi cài đặt Stash hoặc trong quá trình sử dụng ứng dụng, mẫu thông báo sau được báo cáo trong tệp nhật ký

2012-08-12 22:20:25,437 ERROR [main]  com.jolbox.bonecp.ConnectionHandle Database access problem. Killing off all remaining connections in the connection pool. SQL State = 08S01
2012-08-12 22:20:25,456 ERROR [main]  o.h.transaction.JDBCTransaction JDBC begin failed
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 18,058 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.

Gây ra

Sự cố này xảy ra do các kết nối cơ sở dữ liệu hết thời gian của máy chủ MySQL nhanh hơn nhóm kết nối Stash có thể nhận thấy. Điều này làm cạn kiệt nhóm kết nối Stash vì nó sẽ giữ cho các kết nối của nó mở trong khi phía MySQL của các kết nối đã bị đóng

Nghị quyết

Stash được vận chuyển với khoảng thời gian kiểm tra kết nối mặc định là 10 phút

MySQL có giá trị mặc định biến được đặt thành 28800 giây (8 giờ)

Do đó, nếu cả hai bên của kết nối vẫn giữ nguyên giá trị mặc định, sự cố sẽ không bao giờ xảy ra, vì MySQL sẽ không bao giờ hết thời gian chờ kết nối trước khi Stash thực hiện điều đó

Nếu biến wait_timeout của MySQL bị giảm giá trị

  1. Trong trường hợp này, để tránh việc MySQL đóng các kết nối và Stash không thông báo, hãy xác định giá trị khoảng thời gian kiểm tra Stash thành giá trị nhỏ hơn giá trị MySQL.  
    Trong tệp STASH_HOME/shared/stash-config.properties, hãy thêm dòng sau và xác định số phút cho thời gian chờ kết nối

    db.pool.idle.testInterval=1

  2. Nếu thời gian chờ của MySQL chưa đến một phút, hãy thêm interactiveClient=true vào URL JDBC trong tệp stash-config.properties file to use MySQL default value 28800 seconds, eg:

    jdbc.url=jdbc:mysql://localhost:3306/stash212?autoReconnect=true&characterEncoding=utf8&useUnicode=true&sessionVariables=storage_engine%3DInnoDB&interactiveClient=true

     

Lưu ý rằng MySQL giữ lại một số phạm vi cho biến wait_timeoutinteractive_timeout. Kiểm tra kỹ cài đặt tương tự của biến bằng cách chạy các truy vấn sau trên cơ sở dữ liệu

Thời gian chờ kết nối MySQL là gì?

Lỗi hết thời gian kết nối xảy ra khi tường lửa của cơ sở dữ liệu không cho phép bạn kết nối với cơ sở dữ liệu từ máy hoặc tài nguyên cục bộ của bạn . Nếu bạn gặp phải lỗi này, hãy kiểm tra xem bạn đã thêm máy hoặc tài nguyên mà bạn đang kết nối vào danh sách các nguồn đáng tin cậy của cơ sở dữ liệu chưa.

Làm cách nào để sửa lỗi hết thời gian chờ trong MySQL?

Thời gian chờ lệnh mặc định là 30 giây, nhưng bạn có thể thay đổi thời gian này như sau. MySqlCommand cmd = new MySqlCommand(); . CommandTimeout = 60; Bạn cũng có thể đặt thời gian chờ của lệnh thành 0 để làm cho MySQL chờ kết quả quay lại vô thời hạn.

Max_execution_time trong MySQL là gì?

Gợi ý MAX_EXECUTION_TIME( N ) đặt thời gian chờ thực hiện câu lệnh là N mili giây . Nếu tùy chọn này không có hoặc N bằng 0, thời gian chờ câu lệnh được thiết lập bởi biến hệ thống max_execution_time sẽ được áp dụng.