Zwiększ rozmiar max_allowed_packet w MySQL

TL;DR — Aby zwiększyć trwale rozmiar max_allowed_packet, dodaj max_allowed_packet=1G w sekcji [mysqld] w my.cnf i zrestartuj MySQL. Aby uzyskać natychmiastową poprawkę bez restartu, uruchom SET GLOBAL max_allowed_packet=1073741824; w kliencie MySQL. Potwierdź zmianę poleceniem SHOW VARIABLES LIKE 'max_allowed_packet';.

Wizualne przedstawienie: Zwiększ rozmiar max_allowed_packet w MySQL. Obraz utworzony przez Dali.

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 mysqldump lub 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

  1. Otwórz my.ini (Windows) lub my.cnf (Linux/macOS) w katalogu instalacji serwera MySQL. W większości systemów Linux plik jest w /etc/mysql/my.cnf lub /etc/my.cnf. Aby skonfigurować serwer MySQL z linii poleceń, 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. Znajdź lub dodaj linię max_allowed_packet. Aby ustawić wartość 1 GB:
[mysqld]
max_allowed_packet=1G
  1. Zapisz plik, a następnie zrestartuj MySQL:
sudo systemctl restart mysql
  1. 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ą:

  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
  1. MySQL nie został zrestartowany. Potwierdź, że usługa zrestartowała się pomyślnie:
sudo systemctl status mysql
  1. Plik niezapisany lub nieczytelny. Zweryfikuj, że plik został zapisany i MySQL ma uprawnienia do jego odczytu.
  2. 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.
  3. 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ę.

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

Updated on 23 maja, 2026

Rene Hermenau

Autor: Rene Hermenau

About the author: René Hermenau is the founder of WP STAGING. He works on WordPress backups, staging, migrations, database handling, and safe deployment workflows.