Mam problem z polami BLOB w mojej bazie danych MySQL - podczas przesyłania plików większych niż około 1 MB pojawia się błąd Packets larger than max_allowed_packet are not allowed.
Oto, co próbowałem:
W przeglądarce zapytań MySQL uruchomiłem aplikację, show variables like 'max_allowed_packet'
która dała 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 kiedy ponownie uruchamiam serwer MySQL, magicznie wraca do 1048576. Co robię tutaj źle?
Pytanie bonusowe, czy można skompresować pole BLOB?
Odpowiedzi:
Zmień plik
my.ini
lub,~/.my.cnf
dołączając do pliku pojedynczą linię pod[mysqld]
lub[client]
sekcję:następnie uruchom ponownie usługę MySQL i gotowe.
Więcej informacji znajduje się w dokumentacji .
źródło
[mysqld]
i nie[mysql]
(bardzo podobny). Kosztowało mnie kilka minut drapania głowy.Max_allowed_packet zmienną można ustawić globalnie uruchamiając zapytania.
Jeśli jednak nie zmienisz go w
my.ini
pliku (jak sugeruje dragon112), wartość zostanie zresetowana po ponownym uruchomieniu serwera, nawet jeśli ustawisz go globalnie.Aby zmienić maksymalny dozwolony pakiet dla wszystkich użytkowników na 1 GB, dopóki serwer nie uruchomi się ponownie:
źródło
SHOW VARIABLES WHERE variable_name = 'max_allowed_packet'
wciąż pokazuje starą wartośćJeden z moich młodszych programistów miał problem ze zmodyfikowaniem tego, więc pomyślałem, że rozwinę to bardziej szczegółowo dla użytkowników Linuksa:
1) otwarty terminal
2) root ssh @ YOURIP
3) wprowadź hasło roota
4) nano /etc/mysql/my.cnf (jeśli polecenie nie zostanie rozpoznane, zrób to najpierw lub spróbuj vi, a następnie powtórz: yum install nano)
5) dodaj wiersz: max_allowed_packet = 256M (oczywiście dostosuj rozmiar do wszystkiego, czego potrzebujesz) w sekcji [MYSQLD]. Popełnił błąd, umieszczając go najpierw na dole pliku, aby nie działał.
6) Control + O (zapisz), następnie ENTER (potwierdź), a następnie Control + X (zamknij plik)
7) usługa mysqld restart
8) Możesz sprawdzić zmianę w sekcji zmiennych na phpmyadmin
źródło
sudo: command not found
lubthis incident will be reported
ponieważ albosudo
nie zostało zainstalowane i skonfigurowane. Czy lepiej byłoby zaśmiecić tę odpowiedź instrukcjami dotyczącymi konfiguracjisudo
po raz pierwszy?Myślę, że niektórzy chcieliby wiedzieć, jak znaleźć plik my.ini na twoim komputerze. Myślę, że dla użytkowników systemu Windows najlepszy sposób jest następujący:
Otrzymałem tę odpowiedź z http://bugs.mysql.com/bug.php?id=68516
źródło
Postępując zgodnie ze wszystkimi instrukcjami, to właśnie zrobiłem i pracowałem:
Tak więc, jak widzimy, pakiet max_allowed_packet został zmieniony poza my.ini.
Opuść sesję i sprawdź ponownie:
Podsumowując, po ustawieniu GLOBALNEGO pakietu max_allowed = 1073741824 serwer będzie miał nowy pakiet max_allowed_pack, dopóki nie zostanie zrestartowany, jak ktoś wcześniej stwierdził.
źródło
Jeśli otrzymujesz ten błąd podczas wykonywania kopii zapasowej,
max_allowed_packet
możesz ustawić wmy.cnf
szczególności dlamysqldump
.Ciągle otrzymuję ten błąd podczas wykonywania
mysqldump
i nie rozumiałem, bo miałem ten zestaw wmy.cnf
ramach[mysqld]
sekcji. Kiedy już wymyśliłem, że mogę to ustawić[mysqldump]
i ustawić wartość, moje kopie zapasowe zakończyły się bez problemu.źródło
Dla osób korzystających z wamp mysql server
Ikona wampira -> MySql -> my.ini
Przewiń w dół do końca, aż znajdziesz
Dodaj linię między wartością packet_size
Sprawdź, czy zadziałało z tym zapytaniem
źródło
Ten błąd pochodzi z powodu tego, że dane zawierają wartość większą niż ustawiona.
Po prostu zapisz
max_allowed_packed=500M
lub możesz obliczyć 500 * 1024k i użyć tego zamiast 500M, jeśli chcesz.Teraz wystarczy zrestartować MySQL.
źródło
/etc/my.cnf
instancji MySQL lub/etc/my.cnf.d/server.cnf
MariaDBWielu respondentów zauważyło problem i już dało rozwiązanie.
Chcę tylko zasugerować inne rozwiązanie, które polega na zmianie wartości zmiennej Glogal z poziomu narzędzia Mysql Workbench . Jest to oczywiście JEŻELI używasz Workbench działającego lokalnie na serwerze (lub przez połączenie SSH)
Wystarczy połączyć się z instancją i przejść do menu:
Ustaw żądaną wartość, a następnie musisz ponownie uruchomić usługę MySql .
źródło
Dla każdego, kto korzysta z MySQL na usłudze Amazon RDS, ta zmiana odbywa się za pośrednictwem grup parametrów . Musisz utworzyć nową PG lub użyć istniejącej (innej niż domyślna, która jest tylko do odczytu).
Powinieneś poszukać
max_allowed_packet
parametru, zmienić jego wartość, a następnie nacisnąć Zapisz.Po powrocie do instancji MySQL, jeśli utworzyłeś nową PG, powinieneś dołączyć PG do swojej instancji (może być konieczne ponowne uruchomienie). Jeśli zmieniłeś PG, który był już dołączony do twojej instancji, zmiany zostaną zastosowane bez restartu, do wszystkich twoich instancji, które mają dołączoną PG.
źródło
Jeśli chcesz przesłać duży obraz lub dane do bazy danych. Wystarczy zmienić typ danych na
'BIG BLOB'
.źródło
ustaw globalny max_allowed_packet = 10000000000;
źródło