Błąd Magento MySQL zniknął


14

Mam mnóstwo dziwnych problemów z Magento CE 1.7.0.2. Podczas normalnych operacji strona czasami wyświetla stronę błędu Magento ( wystąpił błąd podczas przetwarzania Twojego żądania ) zarówno na interfejsie użytkownika, jak i na serwerze zaplecza. Przeglądając powiązany raport, widzę następujący komunikat:

"SQLSTATE[HY000] [2006] MySQL server has gone away"

Czasami, ale rzadziej, komunikat raportu brzmi:

 Connection reset by peer

Patrzyłem na var> log> system.log i MySQL has gone awaybłędowi towarzyszy:

Warning: PDO::__construct(): MySQL server has gone away  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129
Error while reading greeting packet. PID=1863  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129

Ponadto wydaje się, że przy każdym żądaniu występuje następujący błąd, a także MySQL has gone awaybłędy:

 Warning: include(File.php): failed to open stream: No such file or directory  in /var/www/html/domain.com/live/lib/Varien/Autoload.php on line 93
 Warning: include(): Failed opening 'File.php' for inclusion

Przeglądałem większość artykułów na ten temat i majstrowałem przy parametrach bazy danych, aż krowy wróciły do ​​domu, ale błąd pozostał.

Po kolejnym QnA na temat kompilatora zauważam, że strona administratora System> Narzędzia> Kompilacja jest całkowicie pusta. Myślę, że są to wszystkie powiązane błędy, ale każdy wgląd w debugowanie lub przyczyny byłoby bardzo pomocne.

Przepraszam, jeśli jest to niespójne; Nie spałem około 42 godzin, więc proszę o wyjaśnienia. Dziękuję Ci.

-- aktualizacja --

Mój stos serwerów dla jasności:

PHP 5.5.4 (PHP-FPM)
Nginx 1.4.2
MySQL 5.5.33

-- aktualizacja --

Przychodzi mi do głowy (po pewnym czasie snu), że nigdy nie określiłem - baza kodu PHP i baza danych MySQL znajdują się na osobnych serwerach sprzętowych - bardzo ważne jest, aby wiedzieć, czy mi pomożecie !! Przepraszam.


1
Czy korzystasz z trwałych połączeń z bazą danych? Jeśli tak, spróbuj je wyłączyć. Sprawdziłbym również dzienniki mysql, aby sprawdzić, czy są tam jakieś błędy lub czy rzeczywiście się restartuje, a nie tylko zrywane połączenie.
davidalger

Dzięki David, dostosowywanie dzienników MySQL i DB nigdy nie zostaje trafione, gdy wystąpi błąd.
Używałem

1
Czy uważasz, że połączenie jest złe. Przyczyną tego błędu jest to, że DB nigdy nie dostał msg. Spróbuj debugować, używając informacji o połączeniu z pliku local.xml do wywoływania funkcji mysqli. Zobacz co się dzieje.
SH-

dziękuję, wyglądało na to, że naprawiłem problem z edycją lokalnego pliku

Odpowiedzi:


9

Wynika to głównie z jednego z dwóch poniższych powodów

  1. Serwer przekroczył limit czasu i zamknął połączenie.
    naprawa: spróbuj zwiększyć wait_timeoutzmienną w my.cnf/my.ini pliku konfiguracyjnym mysqld .
  2. Serwer upuścił niepoprawny lub zbyt duży pakiet.
    Poprawka: zwiększ maksymalny limit rozmiaru pakietu, zwiększając wartość max_allowed_packetw my.cnf/my.ini pliku.

Proszę sprawdzić pliki, jeśli próbujesz uzyskać coś, co trwa zbyt długo lub nie nadaje się do zastosowania.


Dzięki Anshu, śledzę dziennik zapytań MySQL, a baza danych nigdy nie zostaje trafiona żądaniem. Ponadto, jeśli zrestartuję serwer, błąd może czasem wystąpić w ciągu 20 sekund od włączenia serwera - znacznie za krótko, aby nawet domyślne ustawienia mogły przekroczyć limit czasu. Ustawić max_allowed_packetna 2G i wait_timoutdo 86400, jeszcze żadnej pomocy.
Jongosi,

Sprawdź, czy połączenie z bazą danych jest prawidłowe, sprawdź plik aplikacji / etc / local.xml
Anshu Mishra,

Dzięki Anshu, tak, jest poprawne - połączenie odbywa się około 68% żądań
Jongosi,

6

Problem rozwiązany! Dziękuję wszystkim za pomoc. Był to problem zapory sprzętowej z hostem internetowym, nawet po ich wyłączeniu przez nas.

Jak potwierdził zespół serwerów 1 i 1 , sprzętowe zapory ogniowe zostały poprawnie skonfigurowane, ale niepoprawnie przechwytywały prawidłowy ruch między serwerem plików a serwerem db przez około 25% czasu.

Zamiast tego skonfigurowaliśmy iptables i całkowicie zamknęliśmy zapory sprzętowe. 100% dostępności teraz.


2
O mój! Sporadyczna zapora ogniowa… pokochałam ten problem. Cieszę się, że rozwiązałeś problem. :)
davidalger

Ten sam problem tutaj i wygląda na to, że Twoje rozwiązanie również dla nas zadziała. Porozmawiam też 1 i 1. Czy wsparcie pomogło ci w jakikolwiek sposób? Mogę się z tobą skontaktować Świergot? Facebook? Proszę zobaczyć mój profil po szczegóły. Dzięki
webDEVILopers

2

Ten sam problem wystąpił w przypadku Magento 2.1, a mój dziennik błędów mysql wielokrotnie pokazywał następujący błąd podczas procesu „MySQL odszedł”:

...[Warning] File Descriptor 1228 exceeded FD_SETSIZE=1024

Aby potencjalnie rozwiązać ten problem, najpierw sprawdź open fileswartość $ ulimit -n, która w moim przypadku była 256.

Po drugie, dodaj table_open_cache = {that ulimit -n value}pod [mysqld]sekcją w swoim my.cnf.

Teraz uruchom ponownie MySQL i mam nadzieję, że wrócisz do akcji.

Uwaga: Używam Magento 2.1 lokalnie na systemie OS X El Capitan z PHP 7.1 i MySQL 5.7.15 z Homebrew. Ale założę się, że to rozwiązanie działałoby również w starszych lub różnych konfiguracjach.


1

Zmodyfikuj plik aplikacji / etc / local.xml w folderze Magento, zastępując wpis dla hosta „127.0.0.1” zamiast „localhost”.


Baza danych znajduje się na osobnym serwerze sprzętowym, dlatego używany jest adres IP serwera MySQL.
Jongosi

1

Wystąpił ten sam błąd podczas migracji dużej bazy danych między 2 serwerami.

Tymczasowe dodanie następujących rzeczy w pliku konfiguracyjnym mysql (/etc/mysql/my.cnf) na moim lokalnym serwerze (docelowym) i ponowne uruchomienie mysql (restart usługi mysql) naprawiło problem:

max_allowed_packet      = 160M
wait_timeout            = 28800000
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.