Jak zmienić maksymalny dozwolony rozmiar pakietu

Mam problem z polami BLOB w bazie MySQL - przy wgrywaniu plików większych niż ok 1MB dostaję błąd Packets larger than max_allowed_packet are not allowed.

Oto co próbowałem:

W przeglądarce zapytań MySQL uruchomiłem show variables like 'max_allowed_packet', który dał mi 1048576.

Następnie wykonuję zapytanie set global max_allowed_packet=33554432 a następnie show variables like 'max_allowed_packet' - daje mi 33554432 zgodnie z oczekiwaniami.

Ale po ponownym uruchomieniu serwera MySQL magicznie wraca do 1048576. Co ja tu robię źle?

Pytanie bonusowe, czy można skompresować pole BLOB?
 242
Author: Muleskinner, 2011-11-09

11 answers

Zmiana w pliku my.ini lub ~/.my.cnf poprzez dodanie pojedynczej linii w sekcji [mysqld] do pliku:

max_allowed_packet=500M

Następnie uruchom ponownie usługę MySQL i gotowe.

Więcej informacji można znaleźć w dokumentacji .
 315
Author: Manuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 11:00:46

Zmienną max_allowed_packet można ustawić globalnie, uruchamiając zapytanie.

Jeśli jednak nie zmienisz jej w pliku my.ini (jak sugerował dragon112), wartość zostanie zresetowana po ponownym uruchomieniu serwera, nawet jeśli ustawisz ją globalnie.

Aby zmienić maksymalny dozwolony pakiet dla wszystkich na 1GB do czasu ponownego uruchomienia serwera:

SET GLOBAL max_allowed_packet=1073741824;
 168
Author: TehShrike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-13 16:02:13

Jeden z moich młodszych programistów miał problem z modyfikacją tego dla mnie, więc pomyślałem, że rozszerzę to bardziej szczegółowo dla użytkowników Linuksa:

1) Otwórz terminal

2) SSH root@YOURIP

3) Wprowadź hasło roota

4) nano / etc / mysql / my.cnf (jeśli polecenie nie jest rozpoznane zrób to najpierw lub spróbuj vi, a następnie powtórz: yum install nano)

5) Dodaj linię: max_allowed_packet=256m (oczywiście dostosuj rozmiar do potrzeb) w sekcji [MYSQLD]. On błąd polegający na umieszczeniu go najpierw na dole pliku, aby nie działał.

Tutaj wpisz opis obrazka

6) Control + O (save) then ENTER (confirm) then Control + X (Exit file)

7) service mysqld restart

8) możesz sprawdzić zmianę w sekcji zmienne w phpmyadmin

 69
Author: naw103,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-27 11:46:31

Myślę, że niektórzy również chcieliby wiedzieć, jak znaleźć my.plik ini na komputerze. Dla użytkowników windows, myślę, że najlepszy sposób jest następujący:

  1. Win + R (skrót od 'run'), wpisz usługi.msc, Enter
  2. Możesz znaleźć wpis w stylu 'MySQL56', kliknij na niego prawym przyciskiem myszy, wybierz właściwości
  3. można było zobaczyć sth jak "D:/Program Files/MySQL / MySQL Server 5.6 / bin \ mysqld" -- defaults-file="D:\ProgramData\MySQL\MySQL Serwer 5.6 \ my.ini" MySQL56

Dostałem odpowiedź od http://bugs.mysql.com/bug.php?id=68516

 31
Author: fstang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 03:30:11

Postępując zgodnie ze wszystkimi instrukcjami, to jest to, co zrobiłem i pracowałem:

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)

Więc, jak widać, max_allowed_packet został zmieniony poza moim.ini.

Opuszczamy sesję i sprawdzamy ponownie:

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)

Podsumowanie, po ustawieniu globalnego max_allowed_packet=1073741824, serwer będzie miał nowy max_allowed_packet, dopóki nie zostanie ponownie uruchomiony, jak ktoś wcześniej stwierdził.

 17
Author: zwitterion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-03 18:15:51

Jeśli błąd zostanie wykryty podczas wykonywania kopii zapasowej, max_allowed_packet można ustawić w my.cnf szczególnie dla mysqldump.

[mysqldump]
max_allowed_packet=512M

Ciągle dostawałem ten błąd podczas wykonywania mysqldump i nie rozumiałem, ponieważ miałem ten zestaw w my.cnf w sekcji [mysqld]. Gdy zorientowałem się, że mogę ustawić go dla [mysqldump] i ustawiłem wartość, moje kopie zapasowe zakończyły się bez problemu.

 12
Author: xpros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 11:01:18

Dla osób prowadzących wamp serwer mysql

Wamp Tray Icon - > MySql - > my.ini

[wampmysqld]
port        = 3306
socket      = /tmp/mysql.sock
key_buffer_size = 16M
max_allowed_packet = 16M        // --> changing this wont solve
sort_buffer_size = 512K

Przewiń w dół do końca, aż znajdziesz

[mysqld]
port=3306
explicit_defaults_for_timestamp = TRUE

Dodaj linię packet_size pomiędzy

[mysqld]
port=3306
max_allowed_packet = 16M
explicit_defaults_for_timestamp = TRUE

Sprawdź, czy działa z tym zapytaniem

Select @@global.max_allowed_packet;
 8
Author: Sayka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 09:38:23

Wielu odpowiedzi dostrzegło problem i już podało rozwiązanie.

Chcę tylko zaproponować inne rozwiązanie, którym jest zmiana wartości zmiennej Glogal z poziomu narzędzia Mysql Workbench . Oczywiście, jeśli używasz Workbencha działającego lokalnie na serwerze (lub przez połączenie SSH)

Wystarczy połączyć się ze swoją instancją i przejść do menu:

Server - > Options File -> Networking - > max_allowed_packed

Ustawiasz żądaną wartość i następnie należy ponownie uruchomić usługę MySql .

 4
Author: cnom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-09 14:16:30

Ten błąd, ponieważ Twoje dane zawierają większą niż ustawiona wartość.

Po prostu zapisz max_allowed_packed=500M możesz też obliczyć, że 500*1024k i użyć tego zamiast 500M, jeśli chcesz.

Teraz po prostu uruchom ponownie MySQL.

 3
Author: Suresh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-10 04:03:56

Dla każdego, kto korzysta z MySQL w usłudze Amazon RDS, zmiana ta odbywa się za pomocą grupy parametrów . Musisz utworzyć nowy PG lub użyć istniejącego (innego niż domyślny, który jest tylko do odczytu).

Należy wyszukać parametr max_allowed_packet, zmienić jego wartość, a następnie nacisnąć przycisk Zapisz.

Z powrotem w swojej instancji MySQL, jeśli utworzyłeś nowy PG, powinieneś dołączyć PG do swojej instancji(może być konieczne ponowne uruchomienie). Jeśli zmieniłeś PG, które było już dołączone do Twojej instancji, zmiany będą stosowane bez ponownego uruchamiania wszystkich instancji, które mają dołączony PG.

 2
Author: SebaGra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-01 13:18:00

Jeśli chcesz przesłać obraz lub dane o dużym rozmiarze do bazy danych. Po prostu zmień typ danych na 'BIG BLOB'.

 0
Author: Vishal J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-28 06:48:15