TL;DR — Aby zwiększyć trwale rozmiar max_allowed_packet, dodaj
max_allowed_packet=1Gw sekcji[mysqld]wmy.cnfi zrestartuj MySQL. Aby uzyskać natychmiastową poprawkę bez restartu, uruchomSET GLOBAL max_allowed_packet=1073741824;w kliencie MySQL. Potwierdź zmianę poleceniemSHOW VARIABLES LIKE 'max_allowed_packet';.
Contents

Gdy MySQL otrzymuje zapytanie z pakietem danych większym niż wartość max_allowed_packet, zgłasza błąd „Packet too large” i zamyka połączenie. To częsty błąd MySQL w środowiskach WordPress – pojawia się podczas błędów rozmiaru pakietu MySQL przy push, błędu packet too large podczas klonowania, importu dużych baz danych i migracji witryn. Domyślna wartość jest niska w stosunku do potrzeb dużych witryn WordPress, ale zwiększenie jej jest proste, gdy zidentyfikujesz odpowiednią metodę dla swojego środowiska Hostingu.
Na przykład, jeśli przywracanie Backupu WP STAGING nie powiedzie się z powodu zbyt małego rozmiaru pakietu, komunikat o błędzie pokazuje rozmiar problematycznego zapytania, więc możesz odpowiednio dostosować max_allowed_packet. W bieżącej wersji WP STAGING plugin dławi i wykonuje zapytania do bazy danych dynamicznie w oparciu o maksymalny dozwolony rozmiar pakietu serwera, ale podstawowy limit MySQL nadal obowiązuje przy bezpośrednich importach i narzędziach zewnętrznych.
Masz dwie opcje zmiany rozmiaru max_allowed_packet MySQL: trwałą zmianę w pliku konfiguracyjnym MySQL oraz tymczasową zmianę przez SQL – obie omówione poniżej.
Co kontroluje max_allowed_packet
Zmienna systemowa max_allowed_packet ustawia maksymalny rozmiar pojedynczego pakietu komunikacji między klientem a serwerem MySQL. Gdy zapytanie, wiersz wyniku lub definicja procedury składowanej przekracza ten limit, MySQL zrywa połączenie i loguje błąd.
Typowe wzorce objawów:
- „Packet too large” – MySQL natychmiast odrzuca zapytanie.
- „MySQL server has gone away” – połączenie urywa się podczas długo trwającego importu.
- Błędy push lub przywracania w WP STAGING, gdy witryna zawiera duże rewizje wpisów, zserializowane wartości opcji lub metadane obrazów przechowywane jako post meta.
- Błędy podczas przywracania
mysqldumplub importu phpMyAdmin.
W naszej kolejce wsparcia najczęstszą przyczyną jest push WP STAGING obejmujący duże biblioteki obrazów lub rewizje wpisów przechowywane jako post meta. Widzieliśmy też, jak to blokuje zwiększanie max_allowed_packet przed migracją na nowego hosta – złapanie limitu przed migracją pozwala uniknąć nieudanych importów w jej trakcie.
Której metody użyć?
| Twoje środowisko | Najlepsza metoda |
|---|---|
| VPS lub serwer dedykowany z dostępem SSH | Edytuj my.cnf – trwałe |
| Hosting współdzielony (bez SSH) | Skontaktuj się z hostem; phpMyAdmin może sprawdzić bieżącą wartość, ale nie zmienić jej trwale |
| AWS RDS for MySQL | Zmodyfikuj parametr grupy DB w konsoli AWS |
| DigitalOcean Managed MySQL | Ustaw w zakładce „Configuration” w panelu kontrolnym |
| Potrzebujesz natychmiastowej poprawki bez restartu | Polecenie SQL SET GLOBAL – tymczasowe, resetuje się przy restarcie |
Jeśli nie wiesz, który plik konfiguracyjny czyta MySQL, uruchom mysql --verbose --help | grep my.cnf w terminalu, aby zobaczyć pełną kolejność wyszukiwania.
Jak ustawić max_allowed_packet na stałe
Trwała zmiana przetrwa restarty serwera MySQL. Metoda zależy od środowiska Hostingu.
VPS lub serwer dedykowany: edytuj my.cnf
- Otwórz
my.ini(Windows) lubmy.cnf(Linux/macOS) w katalogu instalacji serwera MySQL. W większości systemów Linux plik jest w/etc/mysql/my.cnflub/etc/my.cnf. Aby skonfigurować serwer MySQL z linii poleceń, najpierw zweryfikuj dokładną ścieżkę poleceniemmysql --verbose --help | grep my.cnf. - Zlokalizuj sekcję
[mysqld]. Dyrektywa musi być pod[mysqld], nie[mysql]ani[client]– umieszczenie jej w niewłaściwej sekcji to najczęstszy powód, dla którego poprawka wygląda na działającą, ale nie odnosi skutku. - Znajdź lub dodaj linię
max_allowed_packet. Aby ustawić wartość 1 GB:
[mysqld]
max_allowed_packet=1G
- Zapisz plik, a następnie zrestartuj MySQL:
sudo systemctl restart mysql
- Zweryfikuj nową wartość:
SHOW VARIABLES LIKE 'max_allowed_packet';
Hosting współdzielony: sprawdź przez phpMyAdmin
Na hostingu współdzielonym bez dostępu SSH możesz sprawdzić bieżącą wartość max_allowed_packet, przechodząc do phpMyAdmin → Variables i wyszukując max_allowed_packet. Aby trwale ją zwiększyć, skontaktuj się z dostawcą Hostingu – to ustawienie na poziomie serwera, które wymaga dostępu administracyjnego poza współdzielonym panelem.
Zarządzane bazy danych: AWS RDS i DigitalOcean
Usługi MySQL zarządzane w chmurze udostępniają tę zmienną przez swoje panele kontrolne, a nie plik konfiguracyjny:
- AWS RDS for MySQL – otwórz instancję DB w konsoli AWS, przejdź do powiązanej grupy parametrów i ustaw
max_allowed_packet. Zastosuj zaktualizowaną grupę parametrów i zrestartuj instancję, aby zmiana weszła w życie. - DigitalOcean Managed MySQL – przejdź do zakładki Configuration klastra bazy danych i tam zaktualizuj
max_allowed_packet.
Dla obu platform ustaw wartość przed uruchomieniem dużego importu lub migracji. Zobacz zwiększ max_allowed_packet przed migracją w celu uzyskania listy kontrolnej przed migracją.
Jak ustawić max_allowed_packet tymczasowo
Zmienną max_allowed_packet można ustawić globalnie, uruchamiając polecenie SQL. Wchodzi to natychmiast w życie – restart nie jest wymagany – ale wartość resetuje się przy restarcie serwera MySQL. Zawsze uzupełnij to trwałą edycją my.cnf, jeśli zmiana ma być trwała.
Jeśli jednak nie zmienisz jej w pliku my.ini, wartość zawsze zresetuje się przy restarcie serwera, nawet jeśli ustawisz ją globalnie.
Aby zmienić max allowed packet dla wszystkich na 1 GB do restartu serwera:
SET GLOBAL max_allowed_packet=1073741824;
Natychmiastowa weryfikacja:
SHOW VARIABLES LIKE 'max_allowed_packet';
Ta metoda jest przydatna do odblokowania błędów max_allowed_packet podczas trwającego restore lub do przetestowania prawidłowej wartości przed zapisaniem jej w pliku konfiguracyjnym.
Co zrobić, jeśli poprawka nie odnosi skutku
Jeśli SHOW VARIABLES LIKE 'max_allowed_packet'; wciąż zwraca starą wartość po zmianie, przejdź przez tę listę kontrolną:
- Zła sekcja konfiguracji. Dyrektywa musi być pod
[mysqld]. Otwórz plik i potwierdź nagłówek sekcji bezpośrednio nad liniąmax_allowed_packet. - Zły plik konfiguracyjny. MySQL czyta wiele plików w określonej kolejności i wygrywa ostatnia pasująca wartość. Sprawdź właściwą ścieżkę wyszukiwania:
mysql --verbose --help | grep my.cnf
- MySQL nie został zrestartowany. Potwierdź, że usługa zrestartowała się pomyślnie:
sudo systemctl status mysql
- Plik niezapisany lub nieczytelny. Zweryfikuj, że plik został zapisany i MySQL ma uprawnienia do jego odczytu.
- Węzły replikacji. W środowisku z replikacją
SET GLOBALdotyczy tylko węzła, do którego się połączyłeś. Każda replika wymaga własnej aktualizacji pliku konfiguracyjnego. - Limit po stronie klienta. Niektórzy klienci bazy danych ustawiają
max_allowed_packetprzy nawiązywaniu połączenia. Jeśli wartość klienta jest niższa niż wartość serwera, limit klienta obowiązuje niezależnie od ustawienia serwera.
Widzieliśmy, jak poprawka cicho zawodziła, gdy nagłówek sekcji [mysqld] brakował w świeżo utworzonym my.cnf zawierającym tylko wpisy [mysql] – MySQL parsuje plik bez błędów, ale ignoruje dyrektywę.
W przypadku powiązanych błędów limitu pamięci serwera, które pojawiają się obok błędów pakietu MySQL w plikach logów, obowiązują te same reguły sekcji konfiguracji. Dla innych limitów serwera MySQL i PHP podobne podejście do edycji pliku konfiguracyjnego serwera rozwiązuje problem.
Powiązane artykuły
- Jak zwiększyć limit PHP Max Input Vars w WordPress
- Jak zwiększyć maksymalny rozmiar przesyłanego pliku w WordPress
- Jak zmienić prefiks tabel WordPress w bazie mySQL
- 3 sposoby na zmianę prefiksu tabel bazy danych WordPress
- Napraw brakujące rozszerzenie PHP MySQL w WordPress
- Poradnik phpMyAdmin – napraw i zoptymalizuj tabele bazy danych
- Błąd MySQL – „Row size too large” podczas przywracania Backupu