Korzystam z serwera w moim biurze, aby przetwarzać niektóre pliki i raportować wyniki na zdalnym serwerze MySQL.
Przetwarzanie plików zajmuje trochę czasu, a proces umiera w połowie z powodu następującego błędu:
2006, MySQL server has gone away
Słyszałem o ustawieniach MySQL, wait_timeout , ale czy muszę to zmienić na serwerze w moim biurze lub na zdalnym serwerze MySQL?
mysql
mysql-error-2006
floatleft
źródło
źródło
max_allowed_packet
rozmiaru lubwait_timeout
ilości nie rozwiązuje problemu, sprawdź zużycie pamięci. Otrzymywałem ten sam błąd i był on spowodowany brakiem pamięci w moim serwerze. Dodałem plik wymiany 1 GB i to naprawiło.Odpowiedzi:
Może być łatwiej sprawdzić, czy połączenie i nawiązać je w razie potrzeby.
Zobacz PHP: mysqli_ping, aby uzyskać informacje na ten temat.
źródło
Zetknąłem się z tym wiele razy i zwykle znalazłem odpowiedź na bardzo niskie ustawienie domyślne
max_allowed_packet
.Podniesienie go w
/etc/my.cnf
(poniżej[mysqld]
) do 8 lub 16M zwykle to naprawia. (Wartość domyślna w MySql 5.74194304
to 4 MB.)Uwaga: Wystarczy utworzyć linię, jeśli nie istnieje
Uwaga: Można to ustawić na działającym serwerze.
Zastosowanie
set global max_allowed_packet=104857600
. Ustawia to na 100 MB.źródło
mysql.server stop
,mysql.server start
(październik 2018 r MySQL v5.7, MacOS)Miałem ten sam problem, ale zmiana
max_allowed_packet
wmy.ini/my.cnf
pliku[mysqld]
podstępem załatwiła sprawę .dodaj linię
teraz,
restart the MySQL service
kiedy skończysz.źródło
Użyłem następującego polecenia w wierszu polecenia MySQL, aby przywrócić bazę danych MySQL, która ma rozmiar ponad 7 GB i działa.
źródło
show variables like 'max_allowed_packet';
Błąd: 2006 ( CR_SERVER_GONE_ERROR )
Zasadniczo możesz spróbować połączyć się, a następnie ponownie wykonać zapytanie, aby rozwiązać ten problem - spróbuj 3-4 razy, zanim całkowicie się poddasz.
Zakładam, że używasz PDO. Jeśli tak, to złap wyjątek PDO, zwiększ licznik, a następnie spróbuj ponownie, jeśli licznik jest poniżej progu.
Jeśli masz zapytanie powodujące przekroczenie limitu czasu, możesz ustawić tę zmienną, wykonując:
Gdzie 300 to liczba sekund, według których maksymalny czas może zająć zapytanie.
Więcej informacji na temat rozwiązywania problemów z połączeniem Mysql.
EDYCJA: Dwa inne ustawienia, których możesz także chcieć użyć to
net_write_timeout
inet_read_timeout
.źródło
W MAMP (wersja non-pro) dodałem
do
...\MAMP\bin\startMysql.sh
Kredyty i więcej szczegółów tutaj
źródło
Ten błąd występuje z powodu upływu czasu oczekiwania.
Po prostu przejdź do serwera mysql i sprawdź jego czas oczekiwania:
http://sggoyal.blogspot.in/2015/01/2006-mysql-server-has-gone-away.html
źródło
Istnieje kilka przyczyn tego błędu.
Związane z MySQL / MariaDB:
wait_timeout
- Czas w sekundach, przez który serwer czeka na połączenie do uaktywnienia się przed jego zamknięciem.interactive_timeout
- Czas w sekundach, przez który serwer czeka na połączenie interaktywne.max_allowed_packet
- Maksymalny rozmiar w bajtach pakietu lub ciągu generowanego / pośredniego. Ustaw tak duży jak największy BLOB, w wielokrotnościach 1024.Przykład my.cnf :
Związane z serwerem:
free -h
Związane z ramami:
CONN_MAX_AGE
(patrz dokumenty )Jak to debugować:
SHOW VARIABLES LIKE '%time%';
mysqladmin variables
log_warnings = 4
log_error_verbosity = 3
źródło
W systemie Windows ci ludzie używający xampp powinni użyć tej ścieżki xampp / mysql / bin / my.ini i zmienić max_allowed_packet (w sekcji [mysqld]) na wybrany rozmiar. na przykład
Ponownie na php.ini (xampp / php / php.ini) zmień upload_max_files rozmiar rozmiaru wyboru. na przykład
Sprawiał mi ból głowy, dopóki tego nie odkryłem. Mam nadzieję, że to pomoże.
źródło
upload_max_filesize
zmiennej. Zawsze jest nierozpoznawany w moimOtrzymałem ten sam błąd na moim serwerze DigitalOcean Ubuntu.
Próbowałem zmienić ustawienia pakietu max_allowed_packet i wait_timeout, ale żadne z nich tego nie naprawiło.
Okazuje się, że mój serwer nie ma pamięci RAM. Dodałem plik wymiany 1 GB i to rozwiązało mój problem.
Sprawdź swoją pamięć,
free -h
aby zobaczyć, czy to właśnie to powoduje.źródło
To był dla mnie problem z pamięcią RAM.
Miałem ten sam problem nawet na serwerze z 12 rdzeniami procesora i 32 GB pamięci RAM. Badałem więcej i próbowałem zwolnić pamięć RAM. Oto polecenie, którego użyłem w Ubuntu 14.04, aby zwolnić pamięć RAM:
I naprawił wszystko. Ustawiłem pod cronem, aby uruchamiał się co godzinę.
I możesz użyć tego polecenia, aby sprawdzić, ile wolnej pamięci RAM jest dostępne:
I otrzymasz coś takiego:
źródło
W moim przypadku była to niska wartość
open_files_limit
zmiennej, która blokowała dostęp mysqld do plików danych.Sprawdziłem to za pomocą:
Po zmianie wartości zmiennej na dużą wartość nasz serwer znów żył:
źródło
Jeśli używasz 64-bitowego WAMPSERVER, poszukaj wielu wystąpień pakietu max_allowed_packet, ponieważ WAMP używa wartości ustawionej w [wampmysqld64], a nie wartości ustawionej w [mysqldump], co dla mnie było problemem, aktualizowałem niewłaściwy. Ustaw na coś takiego jak max_allowed_packet = 64M.
Mam nadzieję, że pomoże to innym użytkownikom Wampserver.
źródło
Zazwyczaj oznacza to problemy z łącznością z serwerem MySQL lub przekroczenia limitu czasu. Ogólnie można go rozwiązać, zmieniając pakiet wait_timeout i max_allowed_packet w pliku my.cnf lub podobnym.
Sugerowałbym te wartości:
wait_timeout = 28800
max_allowed_packet = 8 mln
źródło
W przypadku Vagrant Box upewnij się, że przydzielisz wystarczającą ilość pamięci do skrzynki
źródło
Mało prawdopodobnym scenariuszem jest zapora ogniowa między klientem a serwerem, która wymusza reset TCP w połączeniu.
Miałem ten problem i stwierdziłem, że nasza korporacyjna zapora sieciowa F5 została skonfigurowana do kończenia nieaktywnych sesji, które są bezczynne przez ponad 5 minut.
Po raz kolejny jest to mało prawdopodobny scenariusz.
źródło
Zawsze dobrze jest sprawdzić dzienniki serwera Mysql, z tego powodu, że zniknął.
To ci powie.
źródło
Jeśli używasz serwera xampp:
Idź do xampp -> mysql -> bin -> my.ini
Zmień poniższy parametr:
max_allowed_packet = 500 mln
innodb_log_file_size = 128M
To bardzo mi pomogło :)
źródło
odkomentuj ligne poniżej
my.ini/my.cnf
, spowoduje to podzielenie dużego pliku na mniejszą częśćDO
źródło
Znalazłem rozwiązanie tego błędu „# 2006 - serwer MySQL zniknął”. Rozwiązaniem jest tylko sprawdzenie dwóch plików
Ścieżka do tych plików w systemie Windows to
W tych dwóch plikach wartość tego:
W moim przypadku było to:
zmień na:
Upewnij się w obu przypadkach:
I ostatni zestaw:
Następnie uruchom ponownie Wampserver.
Aby zmienić nazwę użytkownika i hasło phpmyadmin
Możesz bezpośrednio zmienić nazwę użytkownika i hasło phpmyadmin poprzez plik config.inc.php
Te dwie linie
Tutaj możesz podać nową nazwę użytkownika i hasło. Po zmianach zapisz plik i zrestartuj serwer WAMP.
źródło
Mam komunikat o błędzie 2006 w innym oprogramowaniu klienta MySQL na moim pulpicie Ubuntu. Okazało się, że moja wersja sterownika JDBC była za stara.
źródło
Może to być problem z rozmiarem pliku .sql.
Jeśli używasz xampp. Przejdź do panelu sterowania xampp -> Kliknij konfigurację MySql -> Otwórz my.ini.
Zwiększ rozmiar pakietu.
źródło
Jest łatwiejszy sposób, jeśli używasz XAMPP. Otwórz panel sterowania XAMPP i kliknij przycisk konfiguracji w sekcji mysql.
Teraz kliknij my.ini, a otworzy się w edytorze. Zaktualizuj pakiet max_allowed_packet do wymaganego rozmiaru.
Następnie uruchom ponownie usługę mysql. Kliknij przycisk Zatrzymaj w usłudze Mysql, kliknij przycisk Rozpocznij ponownie. Poczekaj kilka minut.
Następnie spróbuj ponownie uruchomić zapytanie MySQL. Mam nadzieję, że to zadziała.
źródło
MAMP 5.3, nie znajdziesz my.cnf i dodanie ich nie działa, ponieważ ten max_allowed_packet jest przechowywany w zmiennych.
Jednym z rozwiązań może być:
Uruchom następujące zapytanie, ustawia max_allowed_packet na 7 gb:
ustaw globalny max_allowed_packet = 268435456;
W przypadku niektórych może być konieczne zwiększenie również następujących wartości:
źródło
Użytkownicy korzystający z XAMPP mają 2 parametry pakietu max_allowed_packet w C: \ xampp \ mysql \ bin \ my.ini.
źródło
Ten błąd występuje zasadniczo z dwóch powodów.
Możesz wypróbować ten kod poniżej.
Łagodzi błąd bez względu na przyczynę, szczególnie z drugiego powodu.
Jeśli jest to spowodowane niską pamięcią RAM, musisz zwiększyć wydajność połączenia z bazą danych z kodu, z konfiguracji bazy danych lub po prostu zwiększyć pamięć RAM.
źródło
Na wszelki wypadek pomaga to każdemu:
Wystąpił ten błąd, gdy otwierałem i zamykałem połączenia w funkcji, która byłaby wywoływana z kilku części aplikacji. Otrzymaliśmy zbyt wiele połączeń, więc pomyśleliśmy, że dobrym pomysłem może być ponowne użycie istniejącego połączenia lub wyrzucenie go i utworzenie nowego takiego:
self :: $ instance-> query ('KILL CONNECTION_ID ()'); self :: $ instance = null; return self :: newConnection ($ baza danych, $ host, $ użytkownik, $ hasło); } zwróć self :: $ instance; } Cóż, okazuje się, że byliśmy zbyt dokładni w zabijaniu, więc procesy, które robią ważne rzeczy na starym połączeniu, nigdy nie zakończą swojej działalności. Więc porzuciliśmy te linie
a ponieważ pozwala na to sprzęt i konfiguracja urządzenia, zwiększyliśmy liczbę dozwolonych połączeń na serwerze poprzez dodanie
do naszego pliku konfiguracyjnego. To na razie naprawiło nasz problem i nauczyliśmy się czegoś o zabijaniu połączeń mysql.
źródło
Jeśli wiesz, że przez jakiś czas jesteś offline, możesz zamknąć połączenie, wykonać przetwarzanie, połączyć się ponownie i napisać raporty.
źródło