Metody płatności Abuse

Ошибка 2006: MySQL Server odszedł

09.03.2021, 22:01

Błąd 2006 o nazwie MySQL Sever zniknął oznacza, że serwer odmówił połączenia, mimo że jest uruchomiony. Istnieją tylko trzy znane powody, dla których pojawia się ten błąd. Pierwszym powodem jest przeciążenie serwera. Czas oczekiwania upłynął. Drugi powód - klient wysłał pakiet, który jest zbyt bolesny. Trzecim powodem jest to, że serwer nie został w pełni zainicjowany. W dalszej części rozważymy szczegółowo, z jakich powodów pojawia się błąd i jak sobie z nim radzić.

Jak naprawić błąd

Zazwyczaj błąd pojawia się podczas próby połączenia się z bazą danych za pomocą PHP, klienta konsoli lub w przypadku korzystania z PhpMyAdmin:

PhpMyAdmin

Przeanalizujmy każdą sytuację osobno.

Upłynął limit czasu

Jak wspomniano na początku tego artykułu, jedną z możliwych przyczyn jest upłynięcie czasu oczekiwania. Może się zdarzyć, że serwer został przeciążony i nie może poradzić sobie z obciążeniem - przetwarzaniem wszystkich połączeń. Aby zrozumieć, jak długo trwają żądania serwera, możesz użyć dowolnego klienta konsoli i połączyć się z serwerem. Jeśli możesz to zrobić, wykonaj dowolne żądanie. Jeśli przetwarzanie zapytań zajmuje zbyt dużo czasu, można zoptymalizować MySQL za pomocą specjalnego skryptu MySQLTuner. Zazwyczaj należy zwiększyć rozmiar puli silnika InnoDB poprzez ustawienie parametru innodb_buffer_pool_size. Optymalna wartość jest określana za pomocą powyższego skryptu.

Jeśli wynosi ona 800 megabajtów (może to być dowolny inny rozmiar), należy ją ustawić:

$ sudo vi /etc/mysql/my.cnf
innodb_buffer_pool_size=800M

https://pq.hosting/help/myfiles/mysqlhasgoneavay-991x576.png

Istnieje jeszcze jeden sposób na rozwiązanie problemu. W tym celu należy zwiększyć czas odpowiedzi serwera. Aby wykonać to zadanie, należy zmienić parametr wait_timeout. Jest to czas w sekundach, przez który należy czekać na odpowiedź z serwera.

Na przykład:

wait_timeout=500

параметр wait_timeout

Wprowadzając zmiany, nie zapomnij o ponownym uruchomieniu serwera w następnej kolejności:

$ sudo systemctl restart mysql

Lub:

$ sudo systemctl restart mariadb

Zbyt duży pakiet

Gdy klient użytkownika utworzy zbyt wiele pakietów, serwer wygeneruje ten błąd. Dostępny rozmiar pakietu (wartość maksymalna) można zwiększyć za pomocą parametru max_allowed_packet.

Na przykład:

$ sudo vi /etc/mysql/my.cnf
max_allowed_packet=128M

Zwróć szczególną uwagę na klienta, ponieważ jeśli wysyła wiele żądań, najwyraźniej robisz coś nie tak. Przynajmniej nie generuj zapytań do MySQL przy użyciu pętli for.

Serwer jest nieprawidłowo zainicjalizowany

Jeśli zdecydujesz się wdrożyć MySQL lub MariaDB w Dockerze, przygotuj się na napotkanie podobnego błędu. Początkowa inicjalizacja kontenera wymaga nieco więcej wolnego czasu. Jeśli nie pozwolisz kontenerowi dokończyć inicjalizacji, zatrzymując go i uruchamiając, baza danych zawsze zwróci ten błąd. Rozwiązaniem jest całkowite usunięcie danych kontenera z bazy danych.

Odbywa się to w następujący sposób:

$ docker-compose down

lub:

$ docker rm mysql-container

Następnie należy usunąć pamięć masową (wolumen) z nieprawidłowo zainicjalizowaną bazą danych. Na początku jednak należy przejrzeć listę wszystkich magazynów:

$ docker volume ls

СЕРВЕР НЕВЕРНО ПРОИНИЦИАЛИЗИРОВАН

Po usunięciu:

$ docker volume rm volume_name

Teraz można rozpocząć inicjalizację aplikacji, wystarczy poczekać, aż serwer bazy danych poinformuje, że jest gotowy i można się z nim połączyć.