Błąd MySQL 1153 - Mam pakiet większy niż bajty „max_allowed_packet”


430

Importuję zrzut MySQL i pojawia się następujący błąd.

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes

Najwyraźniej w bazie danych znajdują się załączniki, co sprawia, że ​​bardzo duże wstawki.


To jest na mojej lokalnej maszynie, Macu z MySQL 5 zainstalowanym z pakietu MySQL.

Gdzie mam się zmienić? max_allowed_packet aby móc zaimportować zrzut?

Czy jest jeszcze coś, co powinnam ustawić?

Samo uruchomienie mysql --max_allowed_packet=32M …spowodowało ten sam błąd.


możliwy duplikat Jak zmienić
maksymalny

@Muleskinner, to pytanie zostało opublikowane 3 lata przed tym, o którym wspominasz, i wskazuję na to 4 lata po twoim komentarzu. : p
tiomno

2
Link do Webyog.com jest zerwany: 404
Pathros

W tym przypadku podobny błąd „Pakiet dla zapytania jest zbyt duży (5526600> 1048576)”. Został spowodowany błędnym wpisem hasła podczas łączenia się z bazą danych MySQL przy użyciu DataGrip 2016.1 przez JetBrains i został rozwiązany po skorygowaniu (przy użyciu właściwego hasła odpowiadający użytkownikowi bazy danych MySQL).
nyedidikeke

Odpowiedzi:


589

Prawdopodobnie musisz go zmienić zarówno dla klienta (działasz, aby wykonać import) ORAZ mysqld demona, który jest uruchomiony i akceptuje import.

W przypadku klienta możesz to określić w wierszu polecenia:

mysql --max_allowed_packet=100M -u root -p database < dump.sql

Również zmienić my.cnf lub my.ini pliku w sekcji mysqld i zestawu:

max_allowed_packet=100M

lub możesz uruchomić te polecenia w konsoli MySQL podłączonej do tego samego serwera:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;

(Użyj bardzo dużej wartości dla rozmiaru pakietu.)


Mam serwer z 16 GB pamięci RAM, czy ustawienie max_allowed_packet100 MB to zły pomysł ?
Webnet

11
Do Twojej wiadomości - pomogło mi rozwiązać RÓŻNY błąd - „Serwer # 2006 zniknął”
itsho

37
Należy pamiętać, że użycie „set global” działa do momentu ponownego uruchomienia usługi mysql.
Will Shaver

2
Pomiń „ustaw globalnie” i ostatni „;” podczas dodawania tych wartości do plików my.ini lub my.cnf. Przykład: „net_buffer_length = 1000000” w pliku my.conf.
Rustavore

3
Na CentOS 5, my.cnf znajduje się na /etc/my.cnf
Rustavore

124

Jak powiedział michaelpryor, musisz to zmienić zarówno dla klienta, jak i demona serwera mysqld.

Jego rozwiązanie dla wiersza poleceń klienta jest dobre, ale pliki ini nie zawsze działają, w zależności od konfiguracji.

Więc otwórz terminal, wpisz mysql, aby uzyskać monit mysql, i wydaj następujące polecenia:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000; 

Nie zamykaj monitu mysql i uruchom wykonywanie wiersza polecenia SQL na drugim terminalu.


2
Rozwiązałem problem dla mnie; import, który wykonuję, jest jednorazowy i nie mogę łatwo zmienić konfiguracji. To działało świetnie. : D
Rob Howard

39

Można to zmienić w my.inipliku (w systemie Windows, znajdującym się w \ Program Files \ MySQL \ MySQL Server) w sekcji serwera, na przykład:

[mysqld]

max_allowed_packet = 10M

5
na komputerze Mac plik oczywiście znajduje się gdzie indziej.
kch

2
jasne

Dla mnie w Fedorze 20 z MariaDB umieszczenie tego ustawienia na końcu /etc/my.cnf.d/server.cnf załatwiło sprawę. Oczywiście musiałem zrestartować usługę ... sudo nano systemctl uruchom ponownie mariadb.service
Ray Foss

Plik najprawdopodobniej to „my.cnf” i na systemach nix, zwykle w / etc / lub / usr / local / etc. Po edycji należy zrestartować serwer mysql, aby zastosować zmianę.
Chris

17

Re my.cnf na Mac OS X podczas korzystania z MySQL z dystrybucji pakietu dmg mysql.com

Domyślnie nigdzie nie można znaleźć my.cnf.

Trzeba skopiować jeden /usr/local/mysql/support-files/my*.cnfdo /etc/my.cnfi restart mysqld. (Co możesz zrobić w panelu preferencji MySQL, jeśli go zainstalowałeś).


Domyślna konfiguracja dla OSX wydaje się być my-medium.cnf, chociaż maksymalny rozmiar pakietu jest taki sam w my-large.cnf ... dopóki nie zaczniesz zmieniać rzeczy :)
Chris Burgess

W moim przypadku /usrl/local/mysql/my.cnf nie działał, dopóki nie skopiowałem go do /etc/my.cnf.
VG

14

W etc / my.cnf spróbuj zmienić max_allowed _packet i net_buffer_length na

max_allowed_packet=100000000
net_buffer_length=1000000 

jeśli to nie działa, spróbuj zmienić na

max_allowed_packet=100M
net_buffer_length=100K 

12

Rozwiązaniem jest zwiększenie maksymalnego pakietu demona MySQL. Możesz to zrobić działającemu demonowi, logując się jako Super i uruchamiając następujące polecenia.

# mysql -u admin -p

mysql> set global net_buffer_length=1000000;
Query OK, 0 rows affected (0.00 sec)

mysql> set global max_allowed_packet=1000000000;
Query OK, 0 rows affected (0.00 sec)

Następnie, aby zaimportować zrzut:

gunzip < dump.sql.gz | mysql -u admin -p database

Na jakiej wersji MySQL korzystałeś z tego?
crmpicco,

6

Na CENTOS 6 /etc/my.cnf, w sekcji [mysqld] poprawna składnia to:

[mysqld]
# added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000 
max_allowed_packet=1000000000
#

4

Użyj max_allowed_packetzmiennej wydającej polecenie takie jak

mysql --max_allowed_packet=32M -u root -p database < dump.sql


2
próbowałem tego, nie działało. cały zrzut w 272 MB, wypróbowany z maks. wyższym niż to.
kch

4

Nieco niezwiązany z twoim problemem, więc oto jeden dla Google.

Jeśli nie wykonałeś mysqldump SQL, przyczyną może być uszkodzenie SQL.

Właśnie dostałem ten błąd, przypadkowo mając niezamknięty literał ciągu w moim kodzie. Zdarzają się niechlujne palce.

To fantastyczny komunikat o błędzie dla niekontrolowanego ciągu, dzięki za MySQL!


1
Ten błąd również wystąpił z powodu zepsutego SQL. Mówiąc dokładniej, moja tabela ma ograniczenia zerowe, a mój kod WSTAWIŁO wartości zerowe. Zamiast dać mi błąd informacyjny, MySQL zwrócił max_allowed_packetbłąd. Jeśli to pomoże tym w przyszłości, WSTAWiałem za pomocą API panddf.to_sql(...)
Alex Petralia,

1

Czasami ustawienie typu:

max_allowed_packet = 16M

w my.ini nie działa.

Spróbuj określić plik my.ini w następujący sposób:

set-variable = max_allowed_packet = 32M

lub

set-variable = max_allowed_packet = 1000000000

Następnie uruchom ponownie serwer:

/etc/init.d/mysql restart

1

Jest to ryzyko bezpieczeństwa max_allowed_packet , ponieważ atakujący może przepychać większe pakiety i powodować awarię systemu.

Tak więc optymalna wartość max_allowed_packet do dostrojenia i przetestowania.

Lepiej jest zmieniać, gdy jest to wymagane (za pomocą set global max_allowed_packet = xxx), niż mieć to jako część my.ini lub my.conf .


0

Pracuję we współdzielonym środowisku hostingowym i prowadziłem witrynę internetową opartą na Drupal. Nie mogę również edytować my.inipliku lub my.confpliku.

Tak więc usunąłem wszystkie tabele, które były powiązane, Cachei dlatego mogłem rozwiązać ten problem. Nadal szukam idealnego rozwiązania / sposobu rozwiązania tego problemu.

Edycja - usunięcie tabel stworzyło mi problemy, ponieważ Drupal spodziewał się, że te tabele powinny istnieć. Opróżniłem więc zawartość tych tabel, które rozwiązały problem.


0

Błąd:

BŁĄD 1153 (08S01) w linii 6772: Dostał pakiet większy niż bajty „max_allowed_packet” Operacja nie powiodła się z kodem wyjścia 1

PYTANIE:

SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; 

Maksymalna wartość:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824

-1

Ustaw max_allowed_packet na taki sam (lub większy) niż ten, który był po zrzuceniu go za pomocą mysqldump. Jeśli nie możesz tego zrobić, ponownie wykonaj zrzut o mniejszej wartości.

To znaczy, zakładając, że zrzuciłeś go za pomocą mysqldump. Jeśli użyłeś innego narzędzia, jesteś sam.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.