TL;DR: Aby zwiększyć
max_allowed_packetna stałe, dodajmax_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 push WP STAGING, 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ówiono 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 blokuje to migracje 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.
Zanim cokolwiek zmienisz, sprawdź bieżącą wartość, aby znać punkt wyjścia. Na serwerze z dostępem SSH uruchom SHOW VARIABLES LIKE 'max_allowed_packet'; w kliencie MySQL; na hostingu współdzielonym otwórz phpMyAdmin, a następnie Variables, i wyszukaj max_allowed_packet. Ustaw nową wartość z zapasem powyżej największego spodziewanego pakietu: gdy przywracanie lub import zawiedzie, komunikat o błędzie podaje rozmiar problematycznego zapytania, więc użyj tej liczby jako dolnej granicy.
VPS lub serwer dedykowany: edytuj my.cnf
1. Otwórz plik konfiguracyjny MySQL. Otwórz my.ini (Windows) lub my.cnf (Linux lub macOS) w katalogu instalacji serwera MySQL. W większości systemów Linux plik jest w /etc/mysql/my.cnf lub /etc/my.cnf. Jeśli nie wiesz, który plik czyta MySQL, najpierw zweryfikuj dokładną ścieżkę poleceniem mysql --verbose --help | grep my.cnf.
2. 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.
3. Ustaw wartość. Znajdź lub dodaj linię max_allowed_packet pod [mysqld]. Aby ustawić wartość 1 GB:
[mysqld]
max_allowed_packet=1G
4. Zapisz plik i zrestartuj MySQL.
sudo systemctl restart mysql
5. 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, a następnie Variables, i wyszukując max_allowed_packet. Aby trwale ją zwiększyć, skontaktuj się z dostawcą Hostingu, ponieważ 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 dużą migracją na nowego hosta, aby import nie zawiódł w jej trakcie.
Jak ustawić max_allowed_packet tymczasowo
Zmienną max_allowed_packet można ustawić globalnie jednym poleceniem SQL. Wchodzi to natychmiast w życie, bez wymaganego restartu, ale wartość resetuje się przy restarcie serwera MySQL. Zawsze uzupełnij to trwałą edycją my.cnf, jeśli zmiana ma być trwała.
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 przywracania lub importu, który właśnie zawodzi, 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ą:
1. Zła sekcja konfiguracji. Dyrektywa musi być pod [mysqld]. Otwórz plik i potwierdź nagłówek sekcji bezpośrednio nad linią max_allowed_packet.
2. 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
3. MySQL nie został zrestartowany. Potwierdź, że usługa zrestartowała się pomyślnie:
sudo systemctl status mysql
4. Plik niezapisany lub nieczytelny. Zweryfikuj, że plik został zapisany i MySQL ma uprawnienia do jego odczytu.
5. Węzły replikacji. W środowisku z replikacją SET GLOBAL dotyczy tylko węzła, do którego się połączyłeś. Każda replika wymaga własnej aktualizacji pliku konfiguracyjnego.
6. Limit po stronie klienta. Niektórzy klienci bazy danych ustawiają max_allowed_packet przy 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ę.
Błędy limitu pamięci serwera czasami pojawiają się obok błędów pakietu MySQL w tym samym pliku logów. Zobacz błędy wyczerpanego PHP memory_limit w celu tej poprawki, która stosuje tę samą dyscyplinę sekcji konfiguracji. Dla limitu max_input_vars w PHP edycja pliku konfiguracyjnego serwera rozwiązuje problem w ten sam sposób.
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