MySQL: Fehler beim Lesen der Kommunikationspakete


12

Ich bekomme diese Warnung in MySQL,

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

Ich habe nur wenige Themen in Google durchlaufen und nach einem Vorschlag habe ich das max_allowed_packetvon 128 to 512 to 1024immer noch gleichem Verhalten erhöht .

Ich bin mit Drupal 7, und ja es gibt viele Blob - Datentypen, aber 1024 Mbdie max_allowed_packetsollte meiner Meinung nach genug sein.

Gibt es eine andere Problemumgehung, um diese Warnung zu überwinden?

BEARBEITEN:

Einige Einstellungen als @ Rolandos Vorschläge / Antwort hinzugefügt, ich erhalte immer noch die gleiche Warnung.

Meine MySQL-Konfiguration sieht folgendermaßen aus:

[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

Meine Anwendung verwendet nur InnoDB, aber es gibt nur wenige Datenbanken wie MySQL, die mit den Standard-MySQL-Installationen geliefert wurden. Sie verwenden nur den MyISAM-Engine-Typ. Ich denke, das sollte nicht mein Anliegen sein.

Wie Sie sehen, habe ich auch eine Replikation. Die Warnung ist auch auf dem replizierten Server dieselbe, dessen Konfiguration mit dieser identisch ist.


Sind alle Ihre Tische InnoDB?
RolandoMySQLDBA

@ RolandoMySQLDBA, Hallo, ja, alle Tabellen sind innodb, ich habe gemäß Ihrer Antwort in einer anderen Frage wie dieser auf dieser Website, aber ich bekomme immer noch die Warnung.

@ RolandoMySQLDBA, ich habe meine Frage bearbeitet und getan, was Sie vorgeschlagen haben. Ich erhalte immer noch diese Warnung. Ich habe mysql.cnf hier, können Sie es sich bitte ansehen, ich könnte etwas vermissen

Ich habe angefangen, diesen Fehler unter MySQL 5.5.35 mit Drupal 6 zu bekommen. Ich habe das Problem nie verstanden, aber es ging beim Upgrade auf 5.7.7 verloren. Jetzt ist es mit 5.7.9 zurückgekehrt. Ich habe eine Einfüge-Abfrage (weniger als 6000 Zeichen Text) isoliert, die in 5.7.7 erfolgreich ist, aber in 5.7.9 einen Abbruch verursacht. Es schlägt nur fehl, wenn es remote ausgeführt wird, nicht lokal. Also derselbe Client, beide Serverversionen laufen nebeneinander auf demselben Computer, der gleiche sql_mode, der gleiche Zeichensatz, das riesige max_allowed_packet. Ich bin fuchsig. Haben Sie das jemals gelöst?
user19292

Antworten:


8

Ich bin froh, dass Sie gesagt haben, dass alle Ihre Daten InnoDB sind, sodass ich wie folgt antworten kann: Wenn max_allowed_packet bei 1G maximal ist und Sie immer noch Probleme haben, gibt es wirklich nur zwei Stellen, an denen Sie suchen müssen:

  1. innodb_log_buffer_size : Die Größe des Puffers in Byte, den InnoDB zum Schreiben in die Protokolldateien auf der Festplatte verwendet. Der Standardwert ist 8 MB. Ein großer Protokollpuffer ermöglicht die Ausführung großer Transaktionen, ohne dass das Protokoll vor dem Festschreiben der Transaktionen auf die Festplatte geschrieben werden muss. Wenn Sie also große Transaktionen haben, spart das Vergrößern des Protokollpuffers Festplatten-E / A.
  2. innodb_log_file_size : Die Größe jeder Protokolldatei in einer Protokollgruppe in Byte. Die kombinierte Größe von Protokolldateien muss weniger als 4 GB betragen. Der Standardwert ist 5 MB. Die zulässigen Werte reichen von 1 MB bis 1 / N-Tausendstel der Größe des Pufferpools, wobei N die Anzahl der Protokolldateien in der Gruppe ist. Je größer der Wert ist, desto weniger Checkpoint-Flush-Aktivität ist im Pufferpool erforderlich, wodurch Festplatten-E / A gespeichert werden. Größere Protokolldateien bedeuten jedoch auch, dass die Wiederherstellung im Falle eines Absturzes langsamer ist.

Ich habe vor ungefähr 2 Jahren etwas angesprochen

VORSCHLÄGE

Sie müssen die InnoDB-Transaktionsprotokolle erhöhen . Hier sind die Schritte zum sicheren Erhöhen von innodb_log_buffer_size und innodb_log_file_size :

Schritt 01: Fügen Sie diese hinzu /etc/my.cnf

[mysqld]
innodb_log_buffer_size = 32M
innodb_log_file_size = 2047M

Schritt 02: Führen Sie dies in MySQL aus

mysql> SET GLOBAL innodb_fast_shutdown = 0;

Schritt 03: Herunterfahren von MySQL

service mysql stop

Schritt 04: Verschieben Sie die alten Protokolle beiseite

mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak

Schritt 05: Starten Sie MySQL

service mysql start

Das ist es.

Die InnoDB-Infrastruktur sollte jetzt über genügend Protokollspeicherplatz für BLOBs unterschiedlicher Größe verfügen.

Versuche es !!!


Vielen Dank für die Antwort. Ich habe meine Frage bearbeitet, um eine mysql.cnfDatei hinzuzufügen . Ich habe getan, was Sie vorgeschlagen haben, aber trotzdem die Warnungen erhalten. Ich kann sehen , max_allowed_packetin mysqldumpgerade ist , 16Mbaber ich denke , das ist nicht die Ursache. key_buffer_sizeist nur 16Kbund wieder sollte es etwas sein MyISAMund ich benutze keine MyISAMStorage Engine in der Anwendung.

1

Nachdem ich im Januar 16 den Kommentar von @ user19292 zu dieser alten Frage gelesen hatte, habe ich ein Upgrade von 5.7.9 auf 5.7.12 durchgeführt und das Problem ist behoben.


1
Ich benutze 5.7.23 und habe das gleiche Problem
Jesus Uzcanga

Gleich hier liegt ein Fehler bei 5.7.26 vor. In Ihrem Fall hat das Upgrade wahrscheinlich auch die Konfigurationen zurückgesetzt, sodass dies möglicherweise Ihr Problem gelöst hat.
Sliq
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.