Ogólny błąd bazy danych: Serwer MySQL 2006 zniknął

24

Ostatnio zacząłem pojawiać się błąd przy każdej próbie dodania treści bez względu na jej typ. Oto błąd, który pojawia się w przeglądarce:

Zgłoszono dodatkowy nieprzechwycony wyjątek podczas obsługi wyjątku.

Oryginalny wyjątek PDO: SQLSTATE [HY000]: Błąd ogólny: serwer MySQL 2006 zniknął: WYBIERZ LICZBĘ (cid) OD {komentarz} GDZIE status =: status; Array ([: status] => 0) w comment_count_unpublished () (wiersz 313 /Applications/MAMP/htdocs/modules/comment/comment.module).

Dodatkowy

PDO Wyjątek: SQLSTATE [HY000]: Błąd ogólny: serwer MySQL 2006 zniknął: INSERT INTO {watchdog} (identyfikator użytkownika, typ, komunikat, zmienne, ważność, łącze, lokalizacja, odsyłacz, nazwa hosta, znacznik czasu) WARTOŚCI (: db_insert_placeholder_0,: db_insert_placeholder_1 ,: db_insert_placeholder_2,: db_insert_placeholder_3,: db_insert_placeholder_4,: db_insert_placeholder_5,: db_insert_placeholder_6,: db_insert_placeholder_7,: db_insert_placeholder_8,: db_insert_placeholder_9); Tablica ([: db_insert_placeholder_0] => 1 [: db_insert_placeholder_1] => php [: db_insert_placeholder_2] =>% type:! Message in% function (line% line% file). [: Db_insert_placeholder_3] => a: 6: { s: 5: „% type”; s: 12: „PDOException”; s: 8: „! message”; s: 154: „SQLSTATE [HY000]: Błąd ogólny: 2006 Serwer MySQL zniknął: WYBIERZ LICZBĘ (cid) OD {komentarz} GDZIE status =: status; Array ([: status] = & gt; 0) "; s: 9:"% function "; s: 27:" comment_count_unpublished () "; s: 5:"% file "; s: 56:" / Applications / MAMP /htdocs/modules/comment/comment.module";s:5:"%line";i:313;s:14:"severity_level";i:3;} [: db_insert_placeholder_4] => 3 [: db_insert_placeholder_5] = > [: db_insert_placeholder_6] =>http: // localhost: 8888 /? q = node% 2Fadd% 2Farcade-project & amp ; [: db_insert_placeholder_7] => http: // localhost: 8888 / [: db_insert_placeholder_8] => 127.0.0.1 [: db_insert_placeholder_9] => 1338336955) w dblog_watchdog () (wiersz 154 w / Applications / MAMP / htdocs / modules / dblog / dblog.module).

W moim pliku błędu php pojawia się również następujący błąd:

Błąd krytyczny PHP: nieprzechwycony wyjątek „PDOException” z komunikatem „SQLSTATE [HY000]: Błąd ogólny: serwer MySQL 2006 zniknął” w /Applications/MAMP/htdocs/includes/database/database.inc:2136

Śledzenie stosu:
0 /Applications/MAMP/htdocs/include/database/database.inc(2136): PDOStatement-> execute (Array)
1 /Applications/MAMP/htdocs/includes/database/database.inc(664): DatabaseStatementBase- > wykonaj (Array, Array)
2 /Applications/MAMP/htdocs/includes/database/database.inc(2315): DatabaseConnection-> query ('SELECT expire, ...', Array, Array)
3 / Applications / MAMP / htdocs / include / lock.inc (167): db_query ('SELECT expire, ...', Array)
4 /Applications/MAMP/htdocs/includes/lock.inc(146): lock_may_be_available ('theme_registry: ...' )
5 /Applications/MAMP/htdocs/includes/theme.inc(447): lock_acquire ('theme_registry: ...')
6 /Applications/MAMP/htdocs/includes/bootstrap.inc(427): ThemeRegistry-> set ( Szyk)
7 [funkcja wewnętrzna]: DrupalCacheArray -> __ destruct ()
8 {main} wrzucony do /Applications/MAMP/htdocs/include/database/database.inc w linii 2136

Mam problem z odczytaniem tych komunikatów o błędach. Czy ktoś mógłby mi pomóc zrozumieć, co się tutaj dzieje?

Mike2012
źródło

Odpowiedzi:

31

9 razy na 10 ten błąd jest spowodowany niewystarczająco dużym max_allowed_packetustawieniem w pliku my.cnf twojego serwera MySQL.

Standardowo domyślnie dla MAMP jest z mojego doświadczenia 1M, co zwykle nie jest wystarczające dla Drupala (szczególnie biorąc pod uwagę rozmiar niektórych generowanych ciągów pamięci podręcznej).

Spróbuj stopniowo zwiększać to ustawienie, aby sprawdzić, czy błąd zniknie. Jestem pewien, że szybkie wyszukiwanie w Google pokaże Ci, jak to zrobić w MAMP.

Clive
źródło
Na szczęście moja sprawa nie mieściła się w kategorii 1 razy na 10. Twoje rekomendacje działały jak urok! Dzięki!
Mike2012
W obliczu tego samego błędu w systemie Windows. Skonfigurowany Apache, MySQL i PHP stos lokalnie ... prosimy kierować
Prerit Mohan
Co mogę zrobić w przypadku hostingu współdzielonego?
mohammed amine bourkadi
Skontaktuj się z gospodarzem, poproś go o zmianę. Jeśli nie mogą / nie chcą, musisz zdecydować, czy ten host jest dla Ciebie odpowiedni @mohammedaminebourkadi.
Clive
6

Ten błąd MySQL / MariaDB:

Błąd: 2006 ( CR_SERVER_GONE_ERROR) - serwer MySQL zniknął

oznacza w zasadzie, że klient nie mógł wysłać pytania do serwera .

Może się to zdarzyć albo tymczasowa usterka, zbyt duże lub nieprawidłowe zapytanie SQL, błędna konfiguracja serwera lub ograniczenie dostawcy hostingu.

Zasadniczo ten błąd może wynikać z kilku rzeczy, takich jak:

  • zapytanie do serwera jest nieprawidłowe lub zbyt duże,

    Rozwiązanie: Zwiększ max_allowed_packetzmienną .

    Uwaga: Upewnij się, że zmienna znajduje się w [mysqld]sekcji, a nie [mysql].

    Uwaga: Nie zapomnij zrestartować serwera MySQL / MariaDB.

  • Przekroczono limit czasu połączenia TCP / IP po stronie klienta.

    Rozwiązanie: Zwiększ wait_timeoutzmienną .

  • Próbowano uruchomić zapytanie po zamknięciu połączenia z serwerem.

    Rozwiązanie: Błąd logiczny w aplikacji powinien zostać poprawiony.

  • Wyszukiwanie nazw hosta nie powiodło się (np. Problem z serwerem DNS) lub serwer został uruchomiony z --skip-networkingopcją.

    Inną możliwością jest to, że zapora blokuje port MySQL (np. Domyślnie 3306).

  • Bieżący wątek został zabity, więc spróbuj ponownie.

  • Wystąpił błąd, w wyniku którego serwer zmarł podczas wykonywania zapytania.

  • Klient działający na innym hoście nie ma niezbędnych uprawnień do połączenia.

  • I wiele innych, więc dowiedz się więcej na: B.5.2.9 Serwer MySQL odszedł .

Aby uzyskać więcej informacji, sprawdź MySQL lub logi systemowe (np /var/log/messages.).

Aby debugować serwer lub klient MySQL, sprawdź: 26.5 Debugowanie i portowanie MySQL .


Jeśli próbujesz zaimportować bazę danych z pliku za pomocą polecenia drushlub mysql, możesz:

  • Dodaj opcję wymuszenia ( -f), mysqlaby kontynuować i wykonać resztę zapytań.

    Jest to przydatne, jeśli baza danych zawiera duże zapytania związane z pamięcią podręczną, które są duże, ale i tak nie są istotne.

    Za pomocą drushspróbuj:cat foo.sql | $(drush sqlconnect) -f

  • Spróbuj zastosować --max-allowed-packetopcję dla mysqlmniejszych wartości.

  • Zwiększ max_allowed_packetiwait_timeout w konfiguracji serwera (np ~/.my.cnf.).

  • Zrzuć oryginalną bazę danych ponownie, używając --skip-extended-insertopcji, aby rozbić duże zapytania. Następnie zaimportuj plik ponownie.


Zobacz także: BŁĄD 2006 (HY000): Serwer MySQL zniknął

kenorb
źródło
3

Odpowiedź udzielona przez @Clive jest normalna, ale może być dodatkowa przyczyna, szczególnie w przypadku formularzy dodawania węzłów.

Formularze dodawania do węzłów są zwykle duże, a ich przetwarzanie może zużywać dużo pamięci (zwłaszcza jeśli podczas zapisywania przetwarzane jest dowolne zdjęcie, tak jak w przypadku modułów przycinania). Jeśli na serwerze zabraknie pamięci, proces mysqld może zostać zabity, co powoduje wyświetlenie tego samego komunikatu „zniknął”.

Chodzi o to, aby przejrzeć dzienniki serwera. Na komputerze CentOS możesz zobaczyć następujący wpis w / var / log / messages

1 stycznia 00:00:00 jądro
nazwy serwera: Brak pamięci: Zabij proces XXXX (mysqld) wynik XXX lub poświęć dziecko 1 stycznia 00:00:00 jądro nazwy serwera: Zabity proces XXXX, UID XX, (mysqld) total-vm: XXXkB , anon-rss: XXXkB, plik-rss: XXkB

Rozwiązaniem tutaj jest dodanie większej ilości pamięci RAM lub dodanie / zwiększenie wymiany.

mpdonadio
źródło