Hướng dẫn lost connection to mysql server during query php - mất kết nối với máy chủ mysql trong khi truy vấn php

Khi bạn chạy các truy vấn MySQL, đôi khi bạn có thể gặp phải lỗi khi nói rằng bạn bị mất kết nối với máy chủ MySQL như sau:

Error Code: 2013. Lost connection to MySQL server during query

Lỗi trên thường xảy ra khi bạn chạy truy vấn MySQL dài hoặc phức tạp chạy trong hơn một vài giây.

Để sửa lỗi, bạn có thể cần thay đổi cài đặt toàn cầu liên quan đến thời gian chờ trong máy chủ cơ sở dữ liệu MySQL của bạn.

Tăng thời gian chờ kết nối từ dòng lệnh

Nếu bạn đang truy cập MySQL từ dòng lệnh, thì bạn có thể tăng số giây MYSQL sẽ đợi phản hồi kết nối bằng tùy chọn --connect-timeout.

Theo mặc định, MySQL sẽ đợi 10 giây trước khi phản hồi với lỗi thời gian chờ kết nối.

Bạn có thể tăng số lên 120 giây để chờ hai phút:

mysql -uroot -proot --connect-timeout 120

Bạn có thể điều chỉnh số 120 ở trên theo số giây bạn muốn chờ phản hồi kết nối.

Khi bạn ở bên trong bảng điều khiển mysql, hãy thử chạy lại truy vấn của bạn để xem liệu nó có hoàn thành thành công không.

Sử dụng tùy chọn --connect-timeout thay đổi các giây thời gian chờ tạm thời. Nó chỉ hoạt động cho phiên MySQL hiện tại mà bạn đang chạy, vì vậy bạn cần sử dụng tùy chọn mỗi khi bạn muốn thời gian chờ kết nối dài hơn.

Nếu bạn muốn thực hiện thay đổi vĩnh viễn cho biến hết thời gian kết nối, thì bạn cần điều chỉnh cài đặt từ máy chủ cơ sở dữ liệu MySQL hoặc công cụ GUI bạn đã sử dụng để truy cập vào máy chủ cơ sở dữ liệu của mình.

Hãy cùng xem cách thay đổi các biến toàn cầu trong thời gian chờ trong máy chủ cơ sở dữ liệu MySQL của bạn trước tiên.

Điều chỉnh các biến toàn cầu thời gian chờ trong máy chủ cơ sở dữ liệu MySQL của bạn

Cơ sở dữ liệu MySQL lưu trữ các biến toàn cầu liên quan đến thời gian chờ mà bạn có thể truy cập bằng truy vấn sau:

SHOW VARIABLES LIKE "%timeout";

Ở đây, kết quả từ cơ sở dữ liệu địa phương của tôi. Các biến được tô sáng là những biến bạn cần thay đổi để cho MySQL chạy các truy vấn dài hơn:

+-----------------------------------+----------+
| Variable_name                     | Value    |
+-----------------------------------+----------+
| connect_timeout                   | 10       |
| delayed_insert_timeout            | 300      |
| have_statement_timeout            | YES      |
| innodb_flush_log_at_timeout       | 1        |
| innodb_lock_wait_timeout          | 50       |
| innodb_rollback_on_timeout        | OFF      |
| interactive_timeout               | 28800    |
| lock_wait_timeout                 | 31536000 |
| mysqlx_connect_timeout            | 30       |
| mysqlx_idle_worker_thread_timeout | 60       |
| mysqlx_interactive_timeout        | 28800    |
| mysqlx_port_open_timeout          | 0        |
| mysqlx_read_timeout               | 30       |
| mysqlx_wait_timeout               | 28800    |
| mysqlx_write_timeout              | 60       |
| net_read_timeout                  | 30       |
| net_write_timeout                 | 60       |
| replica_net_timeout               | 60       |
| rpl_stop_replica_timeout          | 31536000 |
| rpl_stop_slave_timeout            | 31536000 |
| slave_net_timeout                 | 60       |
| wait_timeout                      | 28800    |
+-----------------------------------+----------+

Để thay đổi các giá trị biến, bạn có thể sử dụng truy vấn

mysql -uroot -proot --connect-timeout 120
0 như được hiển thị bên dưới:

SET GLOBAL connect_timeout = 600; 

Truy vấn trên phải điều chỉnh giá trị biến

mysql -uroot -proot --connect-timeout 120
1 thành
mysql -uroot -proot --connect-timeout 120
2 giây. Bạn có thể điều chỉnh các số khi bạn thấy phù hợp.

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

Ngoài ra, nếu bạn 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 My.cnf (MAC) hoặc tệp My.ini (Windows) đượ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 chỉnh sửa văn bản mà bạn chọn và cố gắng tìm các biến sau trong MySQLD:

[mysqld]
connect_timeout = 10
net_read_timeout = 30
wait_timeout = 28800
interactive_timeout = 28800

Các biến

mysql -uroot -proot --connect-timeout 120
3 và
mysql -uroot -proot --connect-timeout 120
4 không nên gây ra bất kỳ vấn đề nào vì chúng thường có 28800 giây (hoặc 8 giờ) làm giá trị mặc định của chúng.

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

mysql -uroot -proot --connect-timeout 120
1 và
mysql -uroot -proot --connect-timeout 120
6. Tôi đề nghị đặt nó thành ít nhất
mysql -uroot -proot --connect-timeout 120
2 giây (10 phút)

Nếu bạn sử dụng các công cụ GUI MySQL như MySQL Workbench, phần tiếp theo ACE hoặc PHPMyAdmin, thì bạn cũng có thể tìm thấy các biến liên quan đến thời gian chờ được cấu hình bởi các công cụ này trong menu cài đặt hoặc tùy chọn của chúng.

Ví dụ: trong MySQL Workbench cho Windows, bạn có thể tìm thấy các cài đặt liên quan đến thời gian chờ trong Chỉnh sửa> Tùy chọn> Trình soạn thảo SQL như hiển thị bên dưới:Edit > Preferences > SQL Editor as shown below:

Nếu bạn sử dụng Mac, thì menu sẽ nằm trong MySQLworkBench> Tùy chọn> Trình chỉnh sửa SQL như được hiển thị bên dưới:MySQLWorkbench > Preferences > SQL Editor as shown below:

Nếu bạn sử dụng phần tiếp theo ACE như tôi, thì bạn có thể tìm thấy tùy chọn thời gian chờ kết nối trong menu Tùy chọn> Mạng.Preferences > Network menu.

Tại đây, một ảnh chụp màn hình từ cài đặt mạng ACE phần tiếp theo:

Đối với các công cụ GUI khác, bạn cần tự mình tìm tùy chọn. Bạn có thể thử tìm kiếm thuật ngữ

mysql -uroot -proot --connect-timeout 120
8 trong Google để tìm tùy chọn.

Và đó là bốn giải pháp bạn có thể cố gắng khắc phục kết nối MySQL bị mất trong quá trình vấn đề truy vấn.

Tôi hy vọng hướng dẫn này đã hữu ích cho bạ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 truy vấn MySQL dài hoặc phức tạp chạy trong hơn một vài giây.Để sửa lỗi, bạn có thể cần thay đổi cài đặt toàn cầu liên quan đến thời gian chờ trong máy chủ cơ sở dữ liệu MySQL của bạn.commonly happens when you run a long or complex MySQL query that runs for more than a few seconds. To fix the error, you may need to change the timeout-related global settings in your MySQL database server.

Làm cách nào để sửa chữa máy chủ mysql đã sử dụng PHP?

Để sửa chữa, bạn có thể tăng giới hạn kích thước gói tối đa MAX_ALLED_PACKET trong tệp My.cnf, ví dụ.Đặt max_allowed_packet = 128m, sau đó khởi động lại máy chủ MySQL của bạn: sudo /etc /init.D/MySQL khởi động lại.increase the maximal packet size limit max_allowed_packet in my. cnf file, eg. set max_allowed_packet = 128M , then restart your MySQL server: sudo /etc/init. d/mysql restart.

PHP có tự động đóng kết nối MySQL không?

Hầu hết các CMS đóng kết nối MySQL ở cuối yêu cầu, điều này thực sự vô nghĩa, bởi vì dù sao cũng sẽ làm điều đó.PHP will do it anyway.

Không thể kết nối với máy chủ MySQL khi hết thời gian?

Một lỗi kết nối đã xảy ra lỗi khi tường lửa của cơ sở dữ liệu sẽ 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 đang gặp lỗi này, hãy kiểm tra xem bạn đã thêm máy hoặc tài nguyên bạn đang kết nối với danh sách các nguồn đáng tin cậy của cơ sở dữ liệu.check that you have added the machine or resource you are connecting from to the database's list of trusted sources.