MySQL-Paket für Abfrage ist zu groß – Problem und Lösung

MySQL-Paket für Abfrage ist zu groß – Problem und Lösung

Problembeschreibung:

Fehlermeldung:

Ursache: com.mysql.jdbc.PacketTooBigException: Paket für Abfrage ist zu groß (1354 > 1024). Sie können diesen Wert auf dem Server ändern
durch Setzen der Variable 'max_allowed_packet'

MySQL begrenzt die Größe der vom Server akzeptierten Datenpakete entsprechend der Konfigurationsdatei. Manchmal ist die Größe des Datenpakets beim Einfügen, Aktualisieren oder Abfragen durch den Parameter max_allowed_packet begrenzt, was dazu führt, dass der Vorgang fehlschlägt.

Sehen Sie sich den Parameter max_allowed_packet an:

Auf dem Client ausführen:

VARIABLEN wie „%max_allowed_packet%“ anzeigen;

Die Ergebnisse sind wie folgt:

+--------------------+------------+ 
| Variablenname | Wert | 
+--------------------+--------------------+ 
| maximal zulässiges Paket | 1024 | 
+--------------------+--------------------+

Änderungsmethode:

1. Um die Konfigurationsdatei zu ändern, können Sie my.cnf (my.ini unter Windows) bearbeiten und sie im Abschnitt [mysqld] oder im Abschnitt zur MySQL-Serverkonfiguration ändern.

max_allowed_packet = 20M

Wenn my.cnf nicht gefunden werden kann, können Sie

mysql --help | grep my.cnf

Suchen Sie die Datei my.cnf.

Unter Linux befindet sich die Datei in /etc/.

2. Ändern Sie in der MySQL-Befehlszeile

setze global max_allowed_packet = 2*1024*1024*10  
//Der Wert hier ist die Anzahl der Bytes. Wenn er auf 20 M geändert wird, müssen Sie sich erneut beim Client anmelden, damit die Änderung wirksam wird.

Hinweis: Nachdem der Client den Befehl zum Ändern verwendet hat, wird dies nur vorübergehend wirksam. Nach dem Neustart von MySQL wird der ursprüngliche Wert wiederhergestellt.

Lösung für den von MySQL unter Linux gemeldeten Fehler „Paket für Abfrage ist zu groß (1040 > 1024)“

Das Projekt lief vorher normal, aber plötzlich traten in den letzten Tagen immer wieder Abfragefehler auf. Ich habe mir die Protokolle angesehen und festgestellt, dass die Fehlermeldung „Paket für Abfrage ist zu groß (1040 > 1024)“ angezeigt wurde. Sie können diesen Wert auf dem Server ändern, indem Sie die Variable „max_allowed_packet“ festlegen. Ich habe bei Baidu nach der Lösung gesucht und den Lösungsverlauf aufgezeichnet.

1. Gründe

Das von der Abfragedatenbank zurückgegebene Datenpaket ist zu groß und überschreitet den Standardwert.
Melden Sie sich bei MySQL an und geben Sie den folgenden Befehl in die Konsole ein, um den Standardwert für max_allowed_packet abzufragen. Er beträgt nur 1024.

VARIABLEN wie „%max_allowed_packet%“ anzeigen;

2. Ändern Sie die standardmäßig maximal zulässige Paketgröße

2.1 Methode 1: Befehlsmethode

(1). Geben Sie den folgenden Befehl in der MySQL-Konsole ein, um max_allowed_packet auf 20M zu setzen

setze global max_allowed_packet = 20*1024*1024;

(2) Beenden Sie MySQL, starten Sie den MySQL-Dienst neu und melden Sie sich dann bei MySQL an, um zu überprüfen, ob max_allowed_packet erfolgreich geändert wurde.

VARIABLEN wie „%max_allowed_packet%“ anzeigen;

2.2 Methode 2: Ändern der Konfigurationsdatei my.cnf
(1) Geben Sie den folgenden Befehl in die MySQL-Konsole ein, um my.cnf zu bearbeiten

sudo vi /etc/mysql/my.cnf

(2). Fügen Sie unten [mysqId] hinzu

max_allowed_packet = 20M

2.2 Beenden Sie den Editiermodus und starten Sie MySQL neu. Folgen Sie den Schritten in 2.1 (2)

3. Hinweis

Nach der Konfiguration habe ich max_allowed_packet abgefragt und festgestellt, dass es 16777216 war, was eigentlich 16*1024*1024 ist, nicht die erwarteten 20 M. Also habe ich noch einmal nachgesehen und festgestellt, dass die Speicherkapazität des Servers möglicherweise nicht ausreicht, da Java einen großen Teil davon belegt, sodass MySQL die Parameter möglicherweise automatisch zurücksetzt. Daher kann es in einigen Fällen sein, dass MySQL den Parameter „max_allowed_packet“ nach einer Weile automatisch auf den Standardwert 1024 zurücksetzt, nachdem Sie ihn geändert haben, und derselbe Fehler erneut auftritt.

<<:  So konfigurieren Sie Nginx, um den Datenverkehr basierend auf dem letzten Segment der Anforderungs-IP aufzuteilen

>>:  Angular-Leistungsoptimierung: Komponenten von Drittanbietern und Lazy-Loading-Technologie

Artikel empfehlen

MySQL 5.7-Bereitstellung und Remotezugriffskonfiguration unter Linux

Vorwort: Vor Kurzem werde ich mit meinen Partnern...

Mysql löscht doppelte Daten, um die kleinste ID-Lösung beizubehalten

Suchen Sie online nach doppelten Daten und behalt...

JavaScript zum Wechseln zwischen mehreren Bildern

In diesem Artikel wird der spezifische JavaScript...

Lösung für Tomcat zum externen Speichern von Konfigurationsdateien

Frage Wenn wir bei der normalen Entwicklung das P...

Verwenden Sie three.js, um coole 3D-Seiteneffekte im Acid-Stil zu erzielen

In diesem Artikel wird hauptsächlich die Verwendu...

Analyse des Prinzips und der Verwendung von MySQL-Benutzerdefinierten Funktionen

Dieser Artikel veranschaulicht anhand von Beispie...

Html+css, um reinen Text und Schaltflächen mit Symbolen zu erreichen

Dieser Artikel fasst die Implementierungsmethoden...

So verbergen und entfernen Sie Bildlaufleisten in HTML

1. HTML-Tags mit Attributen XML/HTML-CodeInhalt i...

Detailliertes Installations- und Deinstallationstutorial für MySQL 8.0.12

1. Installationsschritte für MySQL-Version 8.0.12...