Ogólnie błąd:
Błąd: 2006 ( CR_SERVER_GONE_ERROR) - serwer MySQL zniknął
oznacza, że klient nie może wysłać pytania do serwera .
mysql import
W konkretnym przypadku podczas importowania pliku bazy danych przez mysql najprawdopodobniej oznacza to, że niektóre zapytania w pliku SQL są zbyt duże, aby je zaimportować i nie można ich wykonać na serwerze, dlatego klient zawiedzie przy pierwszym wystąpieniu błędu.
Masz więc następujące możliwości:
Dodaj opcję siły ( -f) dlamysql aby kontynuować i wykonać pozostałe zapytania.
Jest to przydatne, jeśli baza danych zawiera duże zapytania związane z pamięcią podręczną, które i tak nie są istotne.
Zwiększ max_allowed_packetiwait_timeout w konfiguracji serwera (np ~/.my.cnf.).
Zrzuć bazę danych, używając --skip-extended-insertopcji, aby rozbić duże zapytania. Następnie zaimportuj go ponownie.
Spróbuj zastosować --max-allowed-packetopcję dla mysql.
Najczęstsze powody
Ogólnie błąd ten może oznaczać kilka rzeczy, takich jak:
zapytanie do serwera jest nieprawidłowe lub zbyt duże,
Rozwiązanie: Zwiększ max_allowed_packetzmienną .
Upewnij się, że zmienna znajduje się w [mysqld]sekcji, a nie [mysql].
Nie bój się używać dużych liczb do testowania (jak 1G).
Nie zapomnij zrestartować serwera MySQL / MariaDB.
Dokładnie sprawdź, czy wartość została ustawiona poprawnie przez:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
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ł .
Debugowanie
Oto kilka pomysłów debugowania na poziomie eksperckim:
Sprawdź dzienniki, np
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
Sprawdzić swoje połączenie przez mysql, telnetlub funkcji ping (np mysql_pingw PHP).
Służy tcpdumpdo wąchania komunikacji MySQL (nie działa w przypadku połączenia przez gniazdo), np .:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
W systemie Linux użyj strace. Na BSD / Mac użyj dtrace/ dtruss, np
sudo dtruss -a -fn mysqld 2>&1
Zobacz: Rozpoczęcie pracy z DTracing MySQL
Dowiedz się więcej o debugowaniu serwera lub klienta MySQL pod adresem: 26.5 Debugowanie i przenoszenie MySQL .
W sql-common/client.ccelach informacyjnych sprawdź kod źródłowy w pliku odpowiedzialnym za zgłoszenie CR_SERVER_GONE_ERRORbłędu polecenia klienta.
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}