Ich habe ein Problem mit BLOB-Feldern in meiner MySQL-Datenbank. Beim Hochladen von Dateien mit einer Größe von mehr als ca. 1 MB wird eine Fehlermeldung angezeigt Packets larger than max_allowed_packet are not allowed.
Folgendes habe ich versucht:
Im MySQL Query Browser habe ich einen ausgeführt, show variables like 'max_allowed_packet'
der mir 1048576 gab.
Dann führe ich die Abfrage aus, set global max_allowed_packet=33554432
gefolgt von show variables like 'max_allowed_packet'
- es gibt mir 33554432 wie erwartet.
Aber wenn ich den MySQL-Server neu starte, geht er auf magische Weise auf 1048576 zurück. Was mache ich hier falsch?
Bonusfrage, ist es möglich, ein BLOB-Feld zu komprimieren?
Antworten:
Ändern Sie die Datei
my.ini
oder~/.my.cnf
, indem Sie die einzelne Zeile unter[mysqld]
oder den[client]
Abschnitt in Ihre Datei aufnehmen:Starten Sie dann den MySQL-Dienst neu und Sie sind fertig.
Weitere Informationen finden Sie in der Dokumentation .
quelle
[mysqld]
und nicht[mysql]
(sehr ähnlich) ist. Hat mich ein paar Minuten Kopfkratzen gekostet.Die Variable max_allowed_packet kann durch Ausführen einer Abfrage global festgelegt werden.
Wenn Sie es jedoch nicht in der
my.ini
Datei ändern (wie von dragon112 vorgeschlagen), wird der Wert beim Neustart des Servers zurückgesetzt, selbst wenn Sie ihn global festlegen.So ändern Sie das maximal zulässige Paket für alle Benutzer auf 1 GB, bis der Server neu gestartet wird:
quelle
SHOW VARIABLES WHERE variable_name = 'max_allowed_packet'
zeigt immer noch alten WertEiner meiner Junior-Entwickler hatte ein Problem damit, dies für mich zu ändern, sodass ich dachte, ich würde dies für Linux-Benutzer detaillierter erweitern:
1) Terminal öffnen
2) ssh root @ YOURIP
3) Geben Sie das Root-Passwort ein
4) nano /etc/mysql/my.cnf (wenn der Befehl nicht erkannt wird, tun Sie dies zuerst oder versuchen Sie es mit vi und wiederholen Sie dann: yum install nano)
5) Fügen Sie im Abschnitt [MYSQLD] die Zeile hinzu: max_allowed_packet = 256M (passen Sie die Größe offensichtlich an Ihre Bedürfnisse an). Er hat den Fehler gemacht, es zuerst am Ende der Datei abzulegen, damit es nicht funktioniert.
6) Strg + O (Speichern), dann EINGABE (Bestätigen), dann Strg + X (Datei beenden)
7) Service mysqld Neustart
8) Sie können die Änderung im Abschnitt Variablen auf phpmyadmin überprüfen
quelle
sudo: command not found
oderthis incident will be reported
weil beidesudo
nicht installiert und konfiguriert wurden. Wäre es besser, diese Antwort mit Anweisungen zum ersten Einrichten zu verunreinigensudo
?Ich denke, einige möchten auch wissen, wie man die my.ini-Datei auf Ihrem PC findet. Für Windows-Benutzer ist der beste Weg meiner Meinung nach der folgende:
Ich habe diese Antwort von http://bugs.mysql.com/bug.php?id=68516 erhalten
quelle
Nach allen Anweisungen habe ich Folgendes getan und gearbeitet:
Wie wir sehen können, wurde das max_allowed_packet außerhalb von my.ini geändert.
Verlassen wir die Sitzung und überprüfen Sie erneut:
Fazit: Nach SET GLOBAL max_allowed_packet = 1073741824 verfügt der Server über das neue max_allowed_packet, bis es neu gestartet wird, wie bereits erwähnt.
quelle
Wenn dieser Fehler beim Durchführen einer Sicherung auftritt,
max_allowed_packet
kann diesmy.cnf
speziell für festgelegt werdenmysqldump
.Ich habe diesen Fehler immer wieder erhalten, während ich a ausgeführt habe,
mysqldump
und ich habe ihn nicht verstanden, weil ich ihnmy.cnf
unter dem[mysqld]
Abschnitt eingestellt hatte. Sobald ich herausgefunden hatte, dass ich es einstellen konnte[mysqldump]
und den Wert festlegte, wurden meine Sicherungen ohne Probleme abgeschlossen.quelle
Für diejenigen, die Wamp MySQL Server ausführen
Wamp Tray Icon -> MySql -> my.ini
Scrolle bis zum Ende, bis du findest
Fügen Sie die Zeile packet_size dazwischen hinzu
Überprüfen Sie, ob es mit dieser Abfrage funktioniert hat
quelle
Dieser Fehler tritt auf, weil Ihre Daten einen größeren als den eingestellten Wert enthalten.
Schreiben
max_allowed_packed=500M
Sie einfach die auf oder Sie können diese 500 * 1024k berechnen und diese anstelle von 500M verwenden, wenn Sie möchten.Starten Sie jetzt einfach MySQL neu.
quelle
/etc/my.cnf
für MySQL-Instanz oder/etc/my.cnf.d/server.cnf
für MariaDBViele der Antwortenden entdeckten das Problem und gaben bereits die Lösung.
Ich möchte nur eine andere Lösung vorschlagen, bei der der Wert der Glogal-Variablen im Tool Mysql Workbench geändert wird . Dies ist natürlich der Fall, wenn Sie Workbench verwenden, das lokal auf dem Server (oder über eine SSH-Verbindung) ausgeführt wird.
Sie stellen einfach eine Verbindung zu Ihrer Instanz her und gehen zum Menü:
Sie legen den gewünschten Wert fest und müssen dann den MySQL-Dienst neu starten .
quelle
Für alle, die MySQL auf dem Amazon RDS-Dienst ausführen, erfolgt diese Änderung über Parametergruppen . Sie müssen ein neues PG erstellen oder ein vorhandenes verwenden (außer dem Standard, der schreibgeschützt ist).
Sie sollten nach dem
max_allowed_packet
Parameter suchen , seinen Wert ändern und dann auf Speichern klicken.Wenn Sie in Ihrer MySQL-Instanz ein neues PG erstellt haben, sollten Sie das PG an Ihre Instanz anhängen (möglicherweise müssen Sie neu starten). Wenn Sie ein PG geändert haben, das bereits an Ihre Instanz angehängt war, werden Änderungen ohne Neustart auf alle Ihre Instanzen angewendet, an die dieses PG angehängt ist.
quelle
Wenn Sie große Bilder oder Daten in die Datenbank hochladen möchten. Ändern Sie einfach den Datentyp in
'BIG BLOB'
.quelle
set global max_allowed_packet = 10000000000;
quelle