Fizetési módok Abuse

Ошибка 2006: MySQL Server eltűnt

09.03.2021, 22:01

A MySQL Sever has gone away nevű 2006-os hiba azt jelenti, hogy a szerver megtagadta a csatlakozást, annak ellenére, hogy fut. A hiba megjelenésének csak három ismert oka van. Az első ok az, hogy a szerver túlterhelt. A várakozási idő lejárt. A második ok - a kliens túl fájdalmas csomagot küldött. A harmadik ok, hogy a szerver nem lett teljesen inicializálva. A továbbiakban részletesen megvizsgáljuk, hogy milyen okok miatt jelenik meg a hiba, és hogyan kell kezelni.

A hiba kijavítása

A hiba általában akkor jelenik meg, amikor PHP, konzolos kliens, vagy PhpMyAdmin használata esetén próbálunk csatlakozni az adatbázishoz:

PhpMyAdmin

Vizsgáljuk tovább az egyes helyzeteket külön-külön.

Lejárt időkorlát

Ahogy a cikk elején említettük, az egyik lehetséges ok a lejárt várakozási idő. Előfordulhat, hogy a szerver túlterhelt és nem tud megbirkózni a terheléssel - az összes kapcsolat feldolgozásával. Ahhoz, hogy megértsük, mennyi ideig tartanak a szerver kérései, használhatunk bármilyen konzolos klienst, és csatlakozhatunk a szerverhez. Ha ez sikerül, hajtson végre bármilyen kérést. Ha a lekérdezések feldolgozása túl sok időt vesz igénybe, a MySQL-t egy speciális MySQLTuner szkript segítségével optimalizálhatja. Általában az innodb_buffer_pool_size paraméter beállításával növeljük az InnoDB motor pool méretét. Az optimális értéket a fenti szkript segítségével határozhatjuk meg.

Ha ez 800 megabájt (lehet bármilyen más méret is), állítsuk be:

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

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

Van egy másik módja is a probléma megoldásának. Ehhez a szerver válaszidejét növeljük meg. Ehhez a feladathoz meg kell változtatni a wait_timeout paramétert. Ez az az idő másodpercben kifejezve, amely alatt a szerver válaszára kell várni.

Például:

wait_timeout=500

параметр wait_timeout

Módosítások elvégzésekor ne felejtse el a szerver következő újraindítását:

$ sudo systemctl restart mysql

Vagy:

$ sudo systemctl restart mariadb

Túl nagy csomag

Ha egy felhasználó kliense túl sok csomagot hoz létre, a kiszolgáló ezt a hibát generálja. Az elérhető csomagméret (maximális érték) a max_allowed_packet paraméter segítségével növelhető.

Például:

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

Fordítson különös figyelmet az ügyfélre, mert ha sok kérést küld, akkor nyilvánvalóan valamit rosszul csinál. Legalábbis ne generáljon for ciklusokat használó lekérdezéseket a MySQL-hez.

A szerver rosszul van inicializálva

Ha úgy dönt, hogy a MySQL-t vagy a MariaDB-t Dockerben telepíti, készüljön fel arra, hogy hasonló hibával fog találkozni. A konténer inicializálása egy kicsit több szabadidőt igényel. Ha nem hagyja, hogy a konténer befejezze az inicializálást úgy, hogy először leállítja és elindítja, az adatbázis mindig ezt a hibát fogja visszaadni. A megoldás az, hogy a konténer adatait teljesen eltávolítjuk az adatbázisból.

Ez a következőképpen történik:

$ docker-compose down

ill:

$ docker rm mysql-container

Ezután törölni kell a tárolót (kötetet) a hibásan inicializált adatbázissal. De az elején nézze át az összes tároló listáját:

$ docker volume ls

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

A törlés után:

$ docker volume rm volume_name

Most már elkezdheti az alkalmazás inicializálását, csak várjon, amíg az adatbázis-kiszolgáló jelzi, hogy készen áll, és csatlakozhat hozzá.