Mã lỗi: 2013 mất kết nối với máy chủ MySQL trong khi truy vấn

Lỗi máy chủ MySQL đã biến mất, điều đó có nghĩa là máy chủ MySQL (mysqld) đã hết thời gian chờ và đóng kết nối. Theo mặc định, MySQL sẽ đóng kết nối sau tám giờ (28800 giây) nếu không có gì xảy ra. Tuy nhiên, trong một số trường hợp, máy chủ lưu trữ web, DBA hoặc nhà phát triển ứng dụng của bạn có thể đã giảm cài đặt thời gian chờ này, như được thảo luận bên dưới

Máy chủ MySQL đã biến mất, có thể là một lỗi khó giải quyết. Điều này một phần là do, để giải quyết lỗi này, đôi khi giải pháp liên quan đến nhiều lớp, ứng dụng hoặc thay đổi cấu hình dịch vụ. Bài viết này bao gồm các giải pháp tôi đã thấy cho lỗi chung của máy chủ MySQL này. Nếu bạn tìm thấy một giải pháp không được liệt kê hoặc liên kết đến trên trang này, vui lòng gửi cho tôi một ghi chú hoặc để lại nhận xét

Mã lỗi: 2013 mất kết nối với máy chủ MySQL trong khi truy vấn

 

Máy chủ MySQL đã biến mất ví dụ về nhật ký lỗi

Hãy nhớ rằng lỗi này có thể được ghi lại theo một số cách, như được liệt kê bên dưới. Ngoài ra, đôi khi, lỗi chỉ là dấu hiệu của một vấn đề tiềm ẩn sâu hơn. Có nghĩa là lỗi có thể do sự cố hoặc lỗi trong ứng dụng kết nối hoặc dịch vụ từ xa của bạn. Trong trường hợp này, bạn cần kiểm tra TẤT CẢ nhật ký lỗi có liên quan với cùng một dấu thời gian để xác định xem có thể là nguyên nhân của một sự cố khác hay không. Các giải pháp Giám sát Hiệu suất Ứng dụng và các công cụ theo dõi Ngăn xếp PHP có thể hữu ích. Với suy nghĩ này, đây là các ví dụ về nhật ký lỗi của máy chủ MySQL đã biến mất lỗi

General error: 2006 MySQL server has gone away
Error Code: 2013. Lost connection to MySQL server during query
Warning: Error while sending QUERY packet
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

 

Được tài trợ. Datadog – Xem số liệu truy vấn và giải thích kế hoạch từ tất cả cơ sở dữ liệu của bạn ở một nơi duy nhất.

Mã lỗi: 2013 mất kết nối với máy chủ MySQL trong khi truy vấn

Datadog là một nền tảng giám sát, phân tích và bảo mật hợp nhất cung cấp khả năng giám sát từ đầu đến cuối cho tất cả các cơ sở dữ liệu của bạn, bao gồm MySQL, PostgreSQL, v.v. Nhanh chóng xác định các truy vấn chậm, tốn kém và khắc phục sự cố hiệu suất nhanh hơn với các chỉ số và mẫu cơ sở dữ liệu chính ở một nơi. Dễ dàng tìm kiếm, so sánh và lọc các truy vấn của bạn trên các kế hoạch thực hiện để nhanh chóng xác định các khu vực cần cải thiện hiệu suất và chi phí. Sử dụng các tích hợp của chúng tôi cho MySQL, PostgreSQL, SQL Server, v.v. để trực quan hóa các chỉ số hiệu suất hệ thống chính trên bảng điều khiển sẵn dùng cùng với các chỉ số cấp truy vấn và máy chủ. Giám sát cơ sở dữ liệu Datadog được tích hợp chặt chẽ với phần còn lại của nền tảng Datadog; .

Trị giá. Gói miễn phí hoặc bắt đầu từ $70

 

MySQL wait_timeout

Lý do MySQL server has gone gone error thường là do MySQL’s wait_timeout bị vượt quá. MySQL wait_timeout là số giây máy chủ chờ hoạt động trên kết nối không tương tác trước khi đóng nó. Bạn nên đảm bảo thời gian chờ không được đặt quá thấp. Mặc định cho wait_timeout của MySQL là 28800 giây. Thông thường, nó được hạ xuống tùy ý. Điều đó nói rằng, bạn có thể đặt wait_timeout càng thấp mà không ảnh hưởng đến kết nối cơ sở dữ liệu, có thể là một dấu hiệu tốt về hiệu quả của cơ sở dữ liệu MySQL. Ngoài ra, kiểm tra các biến. net_read_timeout, net_write_timeout và interactive_timeout. Điều chỉnh hoặc thêm các dòng sau vào của tôi. cnf để đáp ứng yêu cầu của bạn

wait_timeout=90
net_read_timeout=90
net_write_timeout=90
interactive_timeout=300
connect_timeout=90

 

Thời gian chờ kết nối MySQL trong cấu hình PHP

Hãy nhìn vào php của bạn. tập tin cấu hình ini. Bạn sẽ tìm thấy các tùy chọn cấu hình MySQL. Đảm bảo mysql. cài đặt connect_timeout không được đặt thấp hơn MySQL wait_timeout, đã thảo luận ở trên. Tùy chọn PHP mysql. connect_timeout không chỉ được sử dụng cho thời gian chờ kết nối. Đó cũng là khi chờ phản hồi đầu tiên từ máy chủ MySQL. Hãy thử tăng mysql. connect_timeout khớp hoặc vượt quá wait_timeout MySQL của bạn và đảm bảo rằng mysql. allow_persistent đang bật (mặc định = đã bật)

mysql.connect_timeout=90
mysql.allow_persistent=1

QUAN TRỌNG. Trước tiên, hãy đọc về PHP Kết nối cơ sở dữ liệu liên tục để hiểu các lợi ích và lưu ý

Ngoài ra, hãy điều chỉnh default_socket_timeout của PHP. Ví dụ: tập lệnh PHP có thể đang chạy truy vấn chậm. Tạo thời gian chờ sử dụng default_socket_timeout. Cuối cùng, nó thoát với lỗi "Máy chủ MySQL đã biến mất". Trước khi bạn gửi thư thù địch, vui lòng đọc ở đây trước. Đây là một đoạn trích

“PHP, theo mặc định, đặt thời gian chờ đọc là 60 giây cho các luồng. Điều này được đặt thông qua php. ini, default_socket_timeout. Giá trị mặc định này áp dụng cho tất cả các luồng không đặt giá trị thời gian chờ nào khác. mysqlnd không đặt bất kỳ giá trị nào khác và do đó các kết nối của các truy vấn chạy lâu có thể bị ngắt kết nối sau default_socket_timeout giây dẫn đến thông báo lỗi 2006 – MySQL Server đã ngừng hoạt động . ”

default_socket_timeout=90

Để xuyên suốt, hãy điều chỉnh cả max_execution_time và max_input_time vẫn trong php. ini, nếu cần thiết. Nếu thời gian thực thi của PHP dài hơn max_execution_time, thì máy chủ MySQL có thể bị ngắt kết nối

max_execution_time = 90
max_input_time = 90

 

MySQL max_allowed_packet

max_allowed_packet là kích thước tối đa của một gói. Kích thước mặc định là 4MB giúp máy chủ MySQL bắt các gói lớn (có thể không chính xác). Kể từ MySQL 8, mặc định đã được tăng lên 16MB. Nếu mysqld nhận được một gói quá lớn, nó sẽ cho rằng có gì đó không ổn và đóng kết nối. Để khắc phục điều này, bạn nên tăng max_allowed_packet trong my. cnf, sau đó khởi động lại MySQL. Tối đa cho cài đặt này là 1GB. Ví dụ

________số 8

 

MySQL innodb_log_file_size

Bạn có thể cần tăng biến innodb_log_file_size MySQL trong tệp my. cấu hình cnf. MySQL của innodb_log_file_size phải bằng 25% của innodb_buffer_pool_size (nếu có thể, không ít hơn 20%). Hãy nhớ rằng giá trị này càng lớn thì càng mất nhiều thời gian để khôi phục sau sự cố cơ sở dữ liệu. (Nguồn. Cố vấn Phpmyadmin)

Điều này có nghĩa là ví dụ. nếu kích thước nhóm bộ đệm của bạn được đặt thành innodb_buffer_pool_size=16G và cài đặt innodb_log_files_in_group của bạn vẫn được đặt thành mặc định đề xuất là 2 tệp (innodb_log_files_in_group=2), thì kích thước innodb_log_file_size của bạn sẽ được đặt thành 2G. Thao tác này sẽ tạo hai (2) tệp nhật ký, mỗi tệp có dung lượng 2GB, tương đương với 25% của innodb_buffer_pool_size=16G

CẢNH BÁO. Bạn phải dừng máy chủ MySQL để thay đổi innodb_log_file_size hoặc innodb_log_files_in_group. Nếu bạn không, bạn có nguy cơ thảm họa. (Đọc. Hướng dẫn làm lại nhật ký MySQL. )

 

Các nguyên nhân khác của máy chủ MySQL đã biến mất

Kết nối MySQL từ xa

Hãy nhớ trước đó tôi đã đề cập rằng lỗi đôi khi chỉ là dấu hiệu của một vấn đề tiềm ẩn sâu hơn. Ví dụ: các kết nối MySQL từ xa đến các dịch vụ của bên thứ 3. Sử dụng plugin xử lý thanh toán của bên thứ 3 cho osCommerce, Magento, v.v.

Bộ ký tự và đối chiếu cơ sở dữ liệu MySQL

Việc thay đổi bộ ký tự cơ sở dữ liệu mặc định thành latin1 và đối chiếu mặc định thành latin1_General_ci dường như đã giải quyết được vấn đề Máy chủ MySQL đã ngừng hoạt động trong một số trường hợp

Vượt quá cài đặt max_connections của MySQL

Max_connections đặt số lượng kết nối máy khách đồng thời tối đa được phép. Hãy cẩn thận với cài đặt này. Tình trạng cạn kiệt bộ nhớ và các tài nguyên khác có thể xảy ra khi đặt quá lớn và chi phí lập lịch trình cũng tăng lên. Theo hướng dẫn, hãy đặt max_connections thành khoảng gấp đôi số lượng kết nối máy khách đồng thời tối đa trước đó. e. g. , nếu sau một tháng hoạt động, số kết nối máy khách đồng thời tối đa là 114, thì hãy đặt thành max_connections=250. Trước khi bạn phát điên với cài đặt này, vui lòng đọc. Cách MySQL xử lý kết nối máy khách

Vẫn chưa được giải quyết?

Oracle đã tập hợp một trang tự trợ giúp tuyệt vời cho máy chủ MySQL đã biến mất lỗi. Trên trang đó, họ cũng đề nghị bạn đảm bảo rằng MySQL không dừng/khởi động lại trong khi truy vấn. trích đoạn

Mã lỗi 2013 trong MySQL là gì?

Mất kết nối với máy chủ MySQL trong khi truy vấn .

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.