MySQL: Lỗi đọc các gói truyền thông


12

Tôi nhận được cảnh báo này trong mysql,

[Warning] Aborted connection 21 to db: 'MyDB' user: 'MyUser' host: 'localhost' (Got an error reading communication packets)

Tôi đã xem qua một vài chủ đề trong google và theo một số gợi ý tôi đã tăng max_allowed_packettừ 128 to 512 to 1024vẫn hành vi tương tự.

Tôi đang sử dụng Drupal 7, và có có rất nhiều kiểu dữ liệu blob, nhưng 1024 Mbvề max_allowed_packetnên đủ theo ý kiến của tôi.

Bất kỳ cách giải quyết khác làm thế nào để vượt qua cảnh báo này?

BIÊN TẬP:

Đã thêm một số cài đặt dưới dạng đề xuất / câu trả lời của @ Rolando, tôi vẫn nhận được cảnh báo tương tự.

Cấu hình mysql của tôi trông như thế này:

[client]
port        = 3306
socket      = /tmp/mysql.sock
default-character-set = utf8

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K 
max_allowed_packet = 1024M 
table_open_cache = 128 
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 192K
# Query cache disabled
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 100
thread_concurrency = 10
tmp_table_size = 128M
max_heap_table_size = 128M
log_error                = /var/log/mysql/mysql-error.log
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 2

log_warnings = 2

server-id   = 1
binlog-format = row
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
log_bin = mysql-bin
log-slave-updates
relay-log=mysqld-relay-bin
expire_logs_days        = 10
max_binlog_size         = 100M

innodb_data_home_dir = /var/db/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/db/mysql
innodb_buffer_pool_size = 8G
character-set-server = utf8
#innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 2047M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 8
innodb_lock_wait_timeout = 50
innodb_flush_method = O_DIRECT

[mysqldump]
quick
quote-names
max_allowed_packet = 16M
default-character-set = utf8

[mysql]
default-character-set = utf8

[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 32M

[mysqlhotcopy]
interactive-timeout

[mysqld_save]
syslog

Ứng dụng của tôi chỉ sử dụng InnoDB, nhưng có một vài cơ sở dữ liệu như mysql, đi kèm với các bản cài đặt mysql tiêu chuẩn chỉ là những cơ sở sử dụng loại công cụ MyISAM, tôi đoán rằng đó không phải là mối quan tâm của tôi.

Như bạn có thể thấy tôi cũng có bản sao, cảnh báo cũng giống như vậy trong máy chủ được sao chép, có cấu hình giống hệt như thế này.


Có phải tất cả các bảng của bạn InnoDB?
RolandoMySQLDBA

@RolandoMySQLDBA, Xin chào, Có tất cả các bảng là innodb, tôi đã làm theo câu trả lời của bạn trong một số câu hỏi khác như thế này trong trang web này, nhưng tôi vẫn nhận được cảnh báo.

@RolandoMySQLDBA, tôi đã chỉnh sửa câu hỏi của mình và đã làm những gì bạn đề xuất, tôi vẫn nhận được cảnh báo đó. Tôi có mysql.cnf ở đây, bạn có thể xem thử không, tôi có thể đang thiếu thứ gì đó

Tôi bắt đầu gặp lỗi này trên MySQL 5.5.35 với Drupal 6. Tôi chưa bao giờ hiểu vấn đề nhưng nó đã biến mất khi nâng cấp lên 5.7.7. Bây giờ nó đã trở lại với 5.7.9. Tôi đã tách một truy vấn chèn (ít hơn 6000 ký tự văn bản) thành công vào ngày 5.7.7 nhưng gây ra hủy bỏ vào ngày 5.7.9. Nó chỉ thất bại khi được thực hiện từ xa, không phải cục bộ. Vì vậy, cùng một máy khách, cả hai phiên bản máy chủ chạy cạnh nhau trên cùng một máy, cùng sql_mode, cùng một bộ ký tự, max_allowed_packet lớn. Tôi bị cáo. Bạn đã bao giờ giải quyết điều này?
dùng19292

Câu trả lời:


8

Tôi rất vui vì bạn đã nói tất cả dữ liệu của bạn là InnoDB vì vậy tôi có thể trả lời như sau: Nếu max_allowed_packet tối đa là 1G và bạn vẫn gặp sự cố, thực sự chỉ có hai nơi để xem:

  1. innodb_log_buffer_size : Kích thước tính theo byte của bộ đệm mà InnoDB sử dụng để ghi vào tệp nhật ký trên đĩa. Giá trị mặc định là 8MB. Bộ đệm nhật ký lớn cho phép các giao dịch lớn chạy mà không cần ghi nhật ký vào đĩa trước khi giao dịch được cam kết. Do đó, nếu bạn có các giao dịch lớn, làm cho bộ đệm nhật ký lớn hơn sẽ tiết kiệm I / O đĩa.
  2. innodb_log_file_size : Kích thước tính theo byte của mỗi tệp nhật ký trong một nhóm nhật ký. Kích thước kết hợp của tệp nhật ký phải nhỏ hơn 4GB. Giá trị mặc định là 5MB. Các giá trị hợp lý nằm trong khoảng từ 1MB đến 1 / N-kích thước của vùng đệm, trong đó N là số lượng tệp nhật ký trong nhóm. Giá trị càng lớn, hoạt động tuôn ra điểm kiểm tra càng ít cần thiết trong vùng đệm, lưu I / O đĩa. Nhưng các tệp nhật ký lớn hơn cũng có nghĩa là phục hồi chậm hơn trong trường hợp xảy ra sự cố.

Tôi đã giải quyết một cái gì đó như khoảng 2 năm trước

BỀN VỮNG

Bạn cần tăng nhật ký giao dịch InnoDB . Dưới đây là các bước để tăng innodb_log_buffer_sizeinnodb_log_file_size một cách an toàn :

Bước 01: Thêm những thứ này vào /etc/my.cnf

[mysqld]
innodb_log_buffer_size = 32M
innodb_log_file_size = 2047M

Bước 02: Chạy cái này trong mysql

mysql> SET GLOBAL innodb_fast_shutdown = 0;

Bước 03: Tắt máy mysql

service mysql stop

Bước 04: Chuyển các bản ghi cũ sang một bên

mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak

Bước 05: Bắt đầu mysql

service mysql start

Đó là nó.

Cơ sở hạ tầng InnoDB hiện có đủ không gian đăng nhập cho các BLOB kích thước khác nhau.

Hãy thử một lần !!!


Cảm ơn bạn rất nhiều vì đã trả lời, tôi đã chỉnh sửa câu hỏi của tôi để thêm mysql.cnftập tin. Tôi đã làm như bạn đề nghị, nhưng vẫn nhận được các cảnh báo. Tôi có thể thấy max_allowed_packettrong mysqldumpchỉ là 16Mbnhưng tôi đoán đó không phải là nguyên nhân. key_buffer_sizechỉ là 16Kbmột lần nữa nó nên là một cái gì đó với MyISAMvà tôi không sử dụng MyISAMcông cụ lưu trữ trong ứng dụng.

1

Sau khi đọc bình luận của @ user19292 vào tháng 1/2016 về câu hỏi cũ này, tôi đã nâng cấp từ 5.7.9 lên 5.7.12 và vấn đề đã biến mất.


1
Tôi đang sử dụng 5.7,23 và gặp vấn đề tương tự
Jesus Uzcanga

Tương tự ở đây, lỗi tồn tại với 5.7.26. Trong trường hợp của bạn, bản nâng cấp có thể cũng thiết lập lại các cấu hình, vì vậy điều này có thể đã giải quyết vấn đề của bạn.
Sliq
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.