Võ Nguyên Thoại
Contents
Một trong những vấn đề thường xuyên gặp phải khi sử dụng máy tính là các lỗi liên quan đến phần mềm. Đối với những người không chuyên, việc khắc phục các lỗi này có thể rất khó khăn và tốn thời gian. Do đó, bạn cần nắm rõ nguyên nhân và cách xử lý của từng lỗi cụ thể. Trong bài viết này, MONA Host sẽ hướng dẫn bạn cách fix lỗi Mysql Server Has Gone Away, một lỗi thường gặp khi sử dụng cơ sở dữ liệu Mysql.
Lỗi “Mysql Server Has Gone Away” là gì?
Một trong những rắc rối thường gặp khi sử dụng WordPress trên hosting là error Mysql Server Has Gone Away. Đây là lỗi xảy ra khi bạn không thể kết nối được với máy chủ cơ sở dữ liệu trong quá trình thực hiện truy vấn.
Nguyên nhân gây ra lỗi Mysql Server Has Gone Away
Để khắc phục lỗi mysql server has gone away, chúng ta cần phải xác định rõ nguồn gốc của nó. Dưới đây là 7 nguyên nhân chủ yếu dẫn đến lỗi error 2006 mà bạn cần biết:
Server hết thời gian chờ
Lỗi mysql server has gone away phpmyadmin có nghĩa là kết nối giữa ứng dụng của bạn và máy chủ MySQL đã bị gián đoạn. Điều này có thể xảy ra vì nhiều nguyên nhân, nhưng một trong số đó là do thời gian chờ kết nối quá ngắn.
Thời gian chờ kết nối là tham số cấu hình của MySQL, quy định khoảng thời gian tối đa mà một kết nối được duy trì khi không có hoạt động nào. Nếu ứng dụng của bạn không gửi hoặc nhận dữ liệu từ máy chủ MySQL trong khoảng thời gian này, kết nối sẽ bị đóng lại để giải phóng tài nguyên.
Truy vấn MySQL lỗi
Một nguyên nhân khác có thể gây ra lỗi Mysql Server Has Gone Away là do truy vấn MySQL bị lỗi và dẫn đến việc kết nối bị đóng. Đôi khi, người dùng cũng có thể đóng kết nối một cách cố ý để thực hiện một truy vấn khác liên quan đến việc đóng kết nối.
Timeout từ TCP / IP quá hạn
Một trong những nguyên nhân có thể dẫn đến lỗi error 2006 Mysql Server Has Gone Away là TCP / IP kết nối giữa máy chủ và khách hàng bị gián đoạn do quá hạn timeout. Lỗi hy000 sẽ xuất hiện khi sử dụng các lệnh sau: mysql_options (…, MYSQL_OPT_READ_TIMEOUT, …) và mysql_options (…, MYSQL_OPT_WRITE_TIMEOUT, …).
Timeout tự động kết nối ở client bị vô hiệu hóa
Khi máy chủ không trả lời yêu cầu của client trong một khoảng thời gian nhất định, error mysql server has gone away sẽ xuất hiện. Khi điều này xảy ra, client có thể tự động kết nối lại với máy chủ hoặc chờ đợi một phản hồi khác. Tuy nhiên, nếu các client khác cũng đang kết nối lại với máy chủ, điều này có thể gây quá tải cho máy chủ và làm cho nó không thể xử lý các yêu cầu mới.
Gửi yêu cầu sai lệch đến máy chủ
Mysqld sẽ từ chối những gói dữ liệu quá lớn hoặc sai lệch so với kỳ vọng. Để khắc phục, người dùng có thể điều chỉnh giới hạn kích thước của các yêu cầu bằng cách thay đổi giá trị max_allowed_packet. Giá trị này mặc định là 1MB, nhưng có thể được tăng lên nếu cần thiết. Đặc biệt, khi làm việc với các cột BLOB có dung lượng lớn, việc tăng giá trị max_allowed_packet sẽ giúp tránh bị ngắt kết nối.
INSERT hoặc thay thế query số lượng quá lớn
Khi gửi quá nhiều yêu cầu cho máy chủ, nó có thể không xử lý được tất cả các hàng một cách hiệu quả. Để khắc phục lỗi, bạn nên chia nhỏ số lượng hàng trong mỗi lời truy vấn INSERT hoặc sử dụng phương pháp thay thế.
Gửi gói dữ liệu quá lớn gây mất kết nối
Sử dụng các client cũ 4.0.8 để gửi gói dữ liệu lớn hơn 16MB sẽ gây ra lỗi Mysql Server Has Gone Away. Đây là do máy chủ yêu cầu phiên bản từ 4.0.8 trở lên để xử lý gói dữ liệu.
-> Xem thêm: Hướng dẫn cài đặt SQL Server 2022 đơn giản, chi tiết nhất
Khắc phục lỗi Mysql Server Has Gone Away nhanh chóng, hiệu quả
MONA đã kể ra nhiều nguyên nhân có thể gây ra lỗi Mysql Server Has Gone kèm theo các hướng giải quyết một số trong số đó. Tuy nhiên, nếu vẫn chưa xác định được nguyên nhân chính xác của lỗi thì bạn có thể xem qua hai phương pháp sau đây để sửa lỗi.
Tăng tạm thời set biến max_connections
Một trong những cách để fix lỗi MySQL server has gone away khi import dữ liệu là tăng giá trị ‘max_allowed_packet‘ trên hệ thống. Chúng ta cần set biến GLOBAL max_allowed_packet cho dịch vụ MySQL đang chạy với giá trị mới là :
32 x 1024 x 1024.
# mysql -u root -p
Nhập mật khẩu:
mysql> SET GLOBAL max_allowed_packet=33554432
Sau đó, chúng ta có thể import dữ liệu lại.
LƯU Ý: không cần phải restart dịch vụ MySQL.
Cấu hình file dịch vụ MySQL
Một cách khác để thay đổi giá trị max_allowed_packet là sửa file /etc/my.cnf. Bằng cách này, khi khởi động lại MySQL, giá trị max_allowed_packet sẽ không bị thay đổi mà giữ nguyên theo ý muốn của chúng ta. Để làm được điều này, chúng ta cần mở file /etc/my.cnf và thêm dòng sau vào phần [mysqld]:
max_allowed_packet=32M
Sau đó, chúng ta cần khởi động lại MySQL để áp dụng thay đổi.
Một số ví dụ về lỗi MySQL server has gone away
Một trong những lỗi thường gặp khi làm việc với MySQL là lỗi 2006 MySQL server has gone away. Lỗi này có thể có nhiều nguyên nhân khác nhau, và cũng có nhiều cách để khắc phục. Sau đây MONA sẽ liệt kê một số lỗi nhiều người thường gặp:
MySQL wait_timeout
Một nguyên nhân thường gặp của lỗi này là do giá trị wait_timeout của MySQL quá thấp. Đây là tham số xác định thời gian chờ mà máy chủ sẽ duy trì kết nối với một thiết bị. Giá trị mặc định của wait_timeout là 28800 giây, nhưng bạn có thể thay đổi nó theo ý muốn.
Việc thay đổi wait_timeout không ảnh hưởng đến hiệu suất hoặc tính ổn định của kết nối cơ sở dữ liệu. Ngoài ra, bạn cũng nên kiểm tra các tham số khác như net_read_timeout, net_write_timeout và thêm chúng vào tệp my.cnf để áp dụng các cài đặt mới của bạn.
Lỗi PHP config “MySQL connect timeout”
mysql.connect_timeout không chỉ là thời gian chờ để kết nối với MySQL mà còn là thời gian chờ để nhận được phản hồi đầu tiên từ MySQL. Bạn có thể kiểm tra trạng thái của mysql.allow_persists bằng cách điều chỉnh mysql.connect_timeout sao cho phù hợp hoặc lớn hơn wait_timeout trong MySQL.
Bạn cũng có thể thay đổi default_socket_timeout của PHP.
Ví dụ: Đặt thời gian chờ sử dụng default_socket_timeout cho các tập lệnh PHP chạy lâu. Lỗi “MySQL server has gone away” sẽ được khắc phục.
Ngoài ra, bạn có thể tham khảo thêm một số thông tin về lỗi này:
Tham số thời gian chờ mặc định PHP được cấu hình trong php.ini, default_socket_timeout. Nếu không có tham số thời gian chờ nào khác được đặt thì tham số mặc định này sẽ được áp dụng. Mysqlnd không đặt bất kỳ tham số nào khác và do đó các kết nối của các truy vấn kéo dài có thể bị ngắt sau giây default_socket_timeout, gây ra lỗi 2006 – MySQL Server đã biến mất.”
Nếu cần, bạn cũng có thể điều chỉnh max_execution_time và max_input_time trong php.ini, khi thời gian kết nối với PHP vượt quá max_execution_time, bạn sẽ bị ngắt kết nối bởi MySQL.
MySQL max_allowed_packet
max_allowed_packet dùng để xác định kích thước gói dữ liệu lớn nhất mà MySQL có thể gửi hoặc nhận. Giá trị mặc định của nó là 4MB cho các phiên bản MySQL trước 8.0, và 16MB cho các phiên bản từ 8.0 trở lên. Nếu bạn cố gắng gửi hoặc nhận một tập tin vượt quá giới hạn này, MySQL sẽ ngắt kết nối và báo lỗi. Để khắc phục điều này, bạn cần chỉnh sửa tệp my.cnf và tăng giá trị max_allowed_packet lên một mức phù hợp với nhu cầu của bạn, tối đa là 1GB. Sau đó, bạn phải khởi động lại MySQL để áp dụng thay đổi.
MySQL innodb_log_file_size
Bạn có thể điều chỉnh giá trị của innodb_log_file_size, nhưng nó phải bằng ít nhất 20% và không quá 25% của innodb_buffer_pool_size. Giá trị này càng cao thì thời gian phục hồi dữ liệu khi xảy ra sự cố càng ngắn.
Ví dụ: Nếu bạn thiết lập innodb_buffer_pool_size = 16G và để mặc định innodb_log_files_in_group là ( innodb_log_files_in_group = 2 ), thì bạn nên đặt innodb_log_file_size là 2G. Khi đó, sẽ có 2 tập tin nhật ký có dung lượng là 2GB, tương đương với 25% innodb_buffer_pool_size = 16G.
LƯU Ý: Khi bạn thay đổi innodb_log_file_size hoặc innodb_log_files_in_group, bạn phải dừng MySQL, nếu không sẽ gây ra lỗi cho hệ thống.
-> Xem thêm: Lỗi SSL là gì? 10 cách sửa lỗi SSL khi dùng Chrome và Firefox cực hiệu quả
Hy vọng với bài viết trên của MONA đã giúp bạn có thêm thông tin về lỗi mysql server has gone away. Nếu bạn vẫn còn thắc mắc hoặc muốn biết thêm về các lỗi khác liên quan đến MySQL Server, hãy gửi câu hỏi cho MONA và chúng tôi sẽ hỗ trợ bạn một cách nhanh chóng.
Bài viết liên quan
Đăng ký để nhận các bài nghiên cứu, blog, thông tin mới nhất từ chúng tôi