402 Stimmen

So ändern Sie die max_allowed_packet size

Ich habe ein Problem mit BLOB-Feldern in meiner MySQL-Datenbank - beim Hochladen von Dateien, die größer als ca. 1MB sind, erhalte ich einen Fehler Packets larger than max_allowed_packet are not allowed.

Ich habe Folgendes ausprobiert:

Im MySQL Query Browser habe ich eine show variables like 'max_allowed_packet' was mir 1048576 ergab.

Dann führe ich die Abfrage aus set global max_allowed_packet=33554432 gefolgt von show variables like 'max_allowed_packet' - erhalte ich wie erwartet 33554432.

Aber wenn ich den MySQL-Server neu starte, ist er auf magische Weise wieder bei 1048576. Was mache ich hier falsch?

Zusatzfrage: Ist es möglich, ein BLOB-Feld zu komprimieren?

503voto

Manuel Punkte 9913

Veränderung der my.ini o ~/.my.cnf Datei, indem Sie die einzelne Zeile unter [mysqld] o [client] Abschnitt in Ihrer Datei:

max_allowed_packet=500M

Starten Sie dann den MySQL-Dienst neu und Sie sind fertig.

Siehe die Dokumentation für weitere Informationen.

297voto

TehShrike Punkte 9433

Le site max_erlaubtes_Paket kann durch Ausführen einer Abfrage global gesetzt werden.

Wenn Sie ihn jedoch nicht in der Datei my.ini Datei (wie von dragon112 vorgeschlagen), der Wert wird beim Neustart des Servers zurückgesetzt auch wenn Sie sie global einstellen.

So ändern Sie die maximal zulässige Paketgröße für alle auf 1 GB, bis der Server neu gestartet wird:

SET GLOBAL max_allowed_packet=1073741824;

114voto

naw103 Punkte 1793

Einer meiner Junior-Entwickler hatte ein Problem damit, dies für mich zu modifizieren, also dachte ich, ich würde es für Linux-Benutzer ausführlicher erklären:

  1. offene Klemme

  2. ssh root@YOURIP

  3. Root-Passwort eingeben

  4. nano /etc/mysql/my.cnf (wenn der Befehl nicht erkannt wird, tun Sie dies zuerst oder versuchen Sie vi dann wiederholen: yum install nano )

  5. die Zeile hinzufügen: max_allowed_packet=256M (natürlich in der von Ihnen benötigten Größe) unter dem [MYSQLD] Abschnitt. Er hat den Fehler gemacht, ihn zuerst an das Ende der Datei zu setzen, so dass er nicht funktioniert hat.

    enter image description here

  6. Control + O (speichern) dann Enter (bestätigen) dann Control + X (Datei verlassen)

  7. service mysqld restart

  8. Sie können die Änderung in der Variablen-Sektion von phpmyadmin überprüfen

52voto

fstang Punkte 4778

Ich denke, einige würden auch gerne wissen, wie man die Datei my.ini auf dem PC findet. Für Windows-Benutzer ist der beste Weg wie folgt:

  1. Win+R (Abkürzung für 'run'), geben Sie services.msc eingeben
  2. Sie könnten einen Eintrag wie 'MySQL56' finden, mit der rechten Maustaste darauf klicken und dann Eigenschaften
  3. Sie könnten etwas wie "D:/Programmdateien/MySQL/MySQL Server 5.6/bin" sehen. \mysqld " --defaults-file=" D:\ProgramData\MySQL\MySQL Server 5.6 \my.ini " MySQL56

Diese Antwort erhielt ich von http://bugs.mysql.com/bug.php?id=68516

35voto

IgorAlves Punkte 4416

Ich habe alle Anweisungen befolgt, und das hat funktioniert:

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              20 |
+-----------------+
1 row in set (0.00 sec)

mysql> select @max_allowed_packet //Mysql do not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet; //That is better... I have max_allowed_packet=32M inside my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

mysql> **SET GLOBAL max_allowed_packet=1073741824**; //Now I'm changing the value.
Query OK, 0 rows affected (0.00 sec)

mysql> select @max_allowed_packet; //Mysql not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value. And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

Wie wir also sehen können, wurde das max_allowed_packet außerhalb von my.ini geändert.

Verlassen Sie die Sitzung und überprüfen Sie sie erneut:

mysql> exit
Bye

C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              21 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value still here and And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

Now I will stop the server
2016-02-03 10:28:30 - Server is stopped

mysql> SELECT CONNECTION_ID();
ERROR 2013 (HY000): Lost connection to MySQL server during query

Now I will start the server
2016-02-03 10:31:54 - Server is running

C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|               9 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The previous new value has gone. Now I see what I have inside my.ini again.
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

Fazit: Nach SET GLOBAL max_allowed_packet=1073741824 hat der Server das neue max_allowed_packet, bis er neu gestartet wird, wie bereits erwähnt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X