Cài đặt MySQL_ maxed_eded_pquet của MySQL thực sự kiểm soát cái gì?


8

Chúng tôi đã dọn dẹp các vấn đề cơ sở dữ liệu trong bốn giờ qua, nhờ một lỗi mysqldumpmà không đủ lỗi. Chúng tôi đã nhận được những lỗi này:

mysqldump: Error 2020: Got packet bigger than "max_allowed_packet" bytes when dumping table "search_dataset" at row: 68014

Cái thiết lập đó làm cái quái gì vậy? Rõ ràng đó không phải là kích thước gói IP, vì hiện tại tôi đã đặt nó ở mức 32M. Tại sao nó tồn tại?

Câu trả lời:


7

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.ccsql / intem_strfunc.cc để biết chi tiết.

Đây có lẽ là lời giải thích đầy đủ nhất về max_allowed_packet tôi từng thấy. Tôi đã gõ 3 đoạn đó ngay từ cuốn sách.


Cảm ơn đã đăng bài đó. Dường như gợi ý rằng "gói" có nghĩa là "gói IP."
Randolf Richardson

Câu trả lời chính xác. Tôi đoán điều này gần giống như tôi đang đi đến một câu trả lời thực sự. (Tôi vẫn khá chắc chắn rằng điều này không đề cập đến các gói IP. Nó không đề cập đến IP ở bất cứ đâu và tôi tin rằng 65535 byte thường là giới hạn trong thế giới thực cho các gói IP bị phân mảnh.)
Plutor

1

Các tài liệu giải thích nó đầy đủ chi tiết ở đây:

"Kích thước tối đa của một gói hoặc bất kỳ chuỗi được tạo / trung gian nào. ..."

Tài liệu này cũng tiếp tục giải quyết các BLOB và cách cài đặt này liên quan đến chúng.


Điều đó không thực sự trả lời câu hỏi của tôi. Một gói trong bối cảnh này là gì? Có thực sự là một gói IP? Không có cách nào tốt hơn giới hạn byte đơn giản để bắt dữ liệu không đúng định dạng?
Plutor

Trừ khi họ định nghĩa "gói" là một cái gì đó khác (mà họ dường như không làm trong tài liệu), thật hợp lý khi hy vọng rằng "gói" đề cập đến một gói IP.
Randolf Richardson

Tôi tìm thấy định nghĩa trong một cuốn sách tôi có. Tôi đã thêm một đoạn trích từ cuốn sách đó như câu trả lời của tôi.
RolandoMySQLDBA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.