Widziałem interesującą odpowiedź na pytanie o największy BLOB, jaki możesz mieć. Oto stwierdzenie, które widziałem w ServerFault: innodb_log_file_size i innodb_log_buffer_size łącznie muszą być większe niż dziesięciokrotność twojego największego obiektu blob, jeśli masz dużo dużych .
W oparciu o ten post ServerFault od Nils-Anders Nøttseter powinieneś przeszukać tabelę i dowiedzieć się, który BLOB jest największy, pomnożyć tę liczbę przez 11 lub więcej, i użyć tej odpowiedzi jako pakietu max_allowed_packing dalej.
To zabawne, że odpowiedziałem na inne pytanie, w którym zasugerowałem zmianę rozmiaru pakietu max_allowed, aby, mam nadzieję, rozwiązać problem .
CAVEAT
Według książki

Oto, co mówi o pakietach MySQL:
Kod komunikacji sieciowej MySQL został napisany przy założeniu, że zapytania są zawsze rozsądnie krótkie, a zatem mogą być wysyłane i przetwarzane przez serwer w jednym kawałku, co w terminologii MySQL nazywa się pakietem . Serwer przydziela pamięć na tymczasowy bufor do przechowywania pakietu i żąda wystarczającej ilości, aby go całkowicie dopasować. Ta architektura wymaga środków ostrożności, aby uniknąć wyczerpania pamięci serwera --- ograniczenie rozmiaru pakietu, co osiąga ta opcja.
Kod zainteresowania związany z tą opcją znajduje się w
sql / net_serv.cc . Spójrz na my_net_read () , a następnie postępuj zgodnie z wywołaniem my_real_read () i zwróć szczególną uwagę na
net_realloc () .
Ta zmienna ogranicza również długość wyniku wielu funkcji strunowych. Szczegółowe informacje można znaleźć w sql / field.cc i
sql / intem_strfunc.cc .
Wiedza na temat pakietów MySQL pozwala DBA na ich rozmiar, aby pomieścić wiele BLOBów w jednym pakiecie MySQL, nawet jeśli są nieprzyzwoicie duże.
Jeśli chodzi o twoją sytuację, powinieneś dowiedzieć się, jaki jest największy BLOB w twojej bazie danych, pomnożyć tę liczbę przez 11 i ustawić swój max_allowed_packet na tę liczbę. Powinieneś być w stanie ustawić go na serwerze bez restartu mysql (osobiście ustawiłbym go 256M, ponieważ rozwiązałoby to inne problemy dotyczące migracji i replikacji, które wykraczają poza zakres tego forum). Aby ustawić wartość 256M dla bazy danych dla wszystkich połączeń przychodzących, uruchom to:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
Następnie dodaj to ustawienie do my.cnf w [mysqld]sekcji:
[mysqld]
max_allowed_packet = 256M