Điều đầu tiên tôi nghĩ đến là những gì max_allowed_packet thực sự kiểm soát. Đây là những gì tôi tìm thấy:
Theo trang 99 của "Tìm hiểu về Nội bộ MySQL" (ISBN 0-596-00957-7) , đây là đoạn 1-3 giải thích về nó:
Mã giao tiếp mạng MySQL được viết theo giả định rằng các truy vấn luôn luôn ngắn một cách hợp lý và do đó có thể được gửi đến và xử lý bởi máy chủ trong một đoạn, được gọi là một gói theo thuật ngữ MySQL. Máy chủ phân bổ bộ nhớ cho bộ đệm tạm thời để lưu trữ gói và nó yêu cầu đủ để phù hợp với nó hoàn toàn. Kiến trúc này yêu cầu một biện pháp phòng ngừa để tránh việc máy chủ hết bộ nhớ --- giới hạn về kích thước của gói, tùy chọn này thực hiện.
Mã quan tâm liên quan đến tùy chọn này được tìm thấy trong
sql / net_serv.cc . Hãy xem my_net_read () , sau đó thực hiện cuộc gọi đến my_real_read () và đặc biệt chú ý đến
net_realloc () .
Biến này cũng giới hạn độ dài của kết quả của nhiều chuỗi functon. Xem sql / field.cc và
sql / intem_strfunc.cc để biết chi tiết.
Đưa ra định nghĩa về max_allowed_packet, sau đó tôi đã phát hiện ra một thứ khác từ ServerFault: innodb_log_file_size và innodb_log_buffer_size kết hợp phải lớn hơn mười lần đối tượng blob lớn nhất của bạn nếu bạn có nhiều đối tượng lớn nhất
Giữ hai điều này trong tâm trí, tôi sẽ tăng innodb_log_file_size trong /etc/my.cnf lên kích thước tối đa được phép cho nó, 2047M. Điều này tất nhiên đòi hỏi những điều sau đây
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start
Điều này sẽ chứa bất kỳ đốm màu lớn nào bạn có thể có trong dữ liệu của mình.