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

So verwenden Sie GeoIP, um Regionen in Nginx einzuschränken

Dieser Blog ist eine Arbeitsnotiz Umfeld: Nginx-V...

Grundlegende Verwendung und Fallstricke der JavaScript-Array-Methode sort()

Vorwort Bei der täglichen Codeentwicklung gibt es...

So implementieren Sie die Vue-Bindungsklasse und den Inline-Bindungsstil

Inhaltsverzeichnis Bindungsklasse Inline-Stile bi...

Lassen Sie uns das Ereignisobjekt in js genauer verstehen

Wir wissen, dass die in JS am häufigsten verwende...

jQuery realisiert den Scroll-Effekt von Tabellenzeilendaten

In diesem Artikelbeispiel wird der spezifische Co...

Gruselige Halloween-Linux-Befehle

Auch wenn nicht Halloween ist, lohnt es sich, sic...

Installations-Tutorial für die ZIP-Archivversion von MySQL 5.7

In diesem Artikel finden Sie das Installations-Tu...

Zusammenfassung neuer Anwendungsbeispiele für Calculated in Vue3

Die Verwendung von „Computed“ in vue3. Da vue3 mi...

JS realisiert den Front-End-Paging-Effekt

In diesem Artikelbeispiel wird der spezifische JS...

Detaillierte Erläuterung der gespeicherten Prozedur „MySql View Trigger“

Sicht: Wenn eine temporäre Tabelle wiederholt ver...

Detaillierte Erklärung der Schlüsselwörter und reservierten Wörter in MySQL 5.7

Vorwort Die Schlüsselwörter von MySQL und Oracle ...

Lösung für das Problem der langsamen Docker-Pull-Image-Geschwindigkeit

Derzeit verfügt Docker über einen offiziellen Mir...