Aktualizacja Owncloud kończy się niepowodzeniem z przekroczeniem limitu czasu MySQL

-1

Właśnie uaktualniłem do nowej wersji Owncloud. Po zainstalowaniu pakietu .deb uruchomiłem

sudo -u www-data php /var/www/owncloud/occ upgrade

co dało mi:

 oc_appconfig                             
  1/24 [=>--------------------------]   4%Doctrine\DBAL\Exception\DriverException: An exception occurred while executing 'SET unique_checks=1':

SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Update failed

Badanie online wykazało, że prawdopodobnie był to problem przekroczenia limitu czasu MySQL, dlatego utworzyłem /etc/mysql/my.cnfnastępującą treść:

[mysqld]
interactive_timeout=86400
wait_timeout=86400
max_allowed_packet=521M

Następnie zrestartowałem MySQL i ponowiłem próbę - bezskutecznie. W większości przypadków krok 1 kończy się niepowodzeniem; czasami dochodzę do kroku 3 (zawsze z tym samym limitem czasu komendy SQL).

System operacyjny to Raspbian, działający na Raspberry Pi 3.

Co naprawi ten problem?

użytkownik149408
źródło

Odpowiedzi:

0

Serwer prawdopodobnie upuścił niepoprawny lub zbyt duży pakiet. Jeśli mysqld otrzyma zbyt duży lub niepoprawny pakiet, zakłada, że ​​coś poszło nie tak z klientem i zamyka połączenie. Aby to naprawić, musisz zwiększyć maksymalny rozmiar pakietu max_allowed_packetw pliku my.cnf, a następnie zrestartować serwer MySQL: (restart /etc/init.d/mysql).

Overmind
źródło
Jest to częsta przyczyna błędu opisanego powyżej, ale tak się nie stało (patrz moja odpowiedź poniżej). Mówiąc dosłownie, komunikat o błędzie oznacza po prostu, że serwer przestał odpowiadać - mógł odrzucić żądanie lub mógł ulec awarii, być może połączenie sieciowe zostało przerwane lub inne.
user149408
Awaria powinna być jednak bardziej wykrywalna w porównaniu do zamykania połączenia. Linki są również łatwe do wykrycia, jeśli przeszkadzają.
Overmind
-1

Komunikat o błędzie

SQLSTATE [HY000]: Błąd ogólny: serwer MySQL 2006 zniknął

może oznaczać kilka rzeczy: Często odnosi się do limitu czasu, który można skorygować poprzez zwiększenie wartości limitu czasu (domyślnie jest to 8 godzin) lub wskazuje, że dozwolony rozmiar pakietu został przekroczony, co można poprawić przez zwiększenie max_allowed_packet. Dzieje się tak również wtedy, gdy serwer MySQL ulega awarii w trakcie operacji , więc sprawdź, czy dwie pierwsze opcje nie przynoszą ulgi.

Po kilku dalszych badaniach zajrzałem do dziennika MySQL. Nazwano pusty plik /var/log/mysql.err, a także niektóre pliki wskazujące rotację dziennika.

Uruchomienie ps -ef | grep mysqlnastępnie dało mi pełny wiersz komend dla procesu MySQL, z parametrem pliku dziennika, który okazał się być /var/lib/mysql/<hostname>.err.

Analiza tego pliku wykazała, że ​​MySQL ciągle się zawieszał z powodu uszkodzenia danych, prawdopodobnie wpływając na oc_filecachetabelę. To wyjaśnia, dlaczego aktualizacja się nie powiodła - osobne pytanie będzie można rozwiązać po uszkodzeniu . Łańcuch wyświetlany przez occ nad paskiem postępu wydaje się być tabelą przetwarzaną w momencie wystąpienia błędu (jeśli nie jest to jasne z dzienników MySQL, gdzie należy przyjrzeć się bliżej, aby znaleźć tabelę).

użytkownik149408
źródło