Mokėjimo būdai Abuse

Ошибка 2006: MySQL serveris išnyko

09.03.2021, 22:01

2006 m. klaida "MySQL Sever" dingo reiškia, kad serveris atsisakė prisijungti, nors jis veikia. Žinomos tik trys priežastys, dėl kurių ši klaida atsiranda. Pirmoji priežastis yra ta, kad serveris yra perkrautas. Pasibaigė laukimo laikas. Antroji priežastis - klientas išsiuntė per daug skausmingą paketą. Trečioji priežastis - serveris nebuvo visiškai inicializuotas. Toliau išsamiai aptarsime, dėl kokių priežasčių atsiranda klaida ir kaip su ja kovoti.

Kaip ištaisyti klaidą

Paprastai klaida atsiranda bandant prisijungti prie duomenų bazės naudojant PHP, konsolinį klientą arba naudojant "PhpMyAdmin":

PhpMyAdmin

Toliau panagrinėkime kiekvieną situaciją atskirai.

Pasibaigęs laiko limitas

Kaip minėta šio straipsnio pradžioje, viena iš galimų priežasčių yra pasibaigęs laukimo laikas. Gali būti, kad serveris buvo perkrautas ir negali susidoroti su apkrova - apdoroti visų prisijungimų. Norėdami suprasti, kiek laiko užtrunka serverio užklausos, galite naudoti bet kurį konsolės klientą ir prisijungti prie serverio. Jei galite tai padaryti, įvykdykite bet kurią užklausą. Jei užklausų apdorojimas trunka per ilgai, galite optimizuoti "MySQL" naudodami specialų scenarijų "MySQLTuner". Paprastai padidinkite "InnoDB" variklio fondo dydį nustatydami parametrą innodb_buffer_pool_size. Optimali vertė nustatoma naudojant pirmiau minėtą scenarijų.

Jei ji yra 800 megabaitų (gali būti bet kokio kito dydžio), nustatykite ją:

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

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

Yra ir kitas problemos sprendimo būdas. Šiuo tikslu padidinamas serverio atsako laikas. Norėdami atlikti šią užduotį, turite pakeisti parametrą wait_timeout. Tai laikas sekundėmis, per kurį turėtumėte laukti atsakymo iš serverio.

Pavyzdžiui:

wait_timeout=500

параметр wait_timeout

Atlikdami pakeitimus, nepamirškite paskui iš naujo paleisti serverį:

$ sudo systemctl restart mysql

Arba:

$ sudo systemctl restart mariadb

Per didelis paketas

Kai naudotojo klientas sukuria per daug paketų, serveris generuoja šią klaidą. Galimą paketų dydį (didžiausią reikšmę) galima padidinti naudojant parametrą max_allowed_packet.

Pavyzdžiui:

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

Atkreipkite ypatingą dėmesį į klientą, nes jei jis siunčia daug užklausų, akivaizdu, kad kažką darote ne taip. Bent jau negeneruokite užklausų "MySQL" naudodami for ciklus.

Serveris neteisingai inicializuotas

Jei nuspręsite "MySQL" arba MariaDB įdiegti "Docker" sistemoje, būkite pasirengę susidurti su panašia klaida. Pradiniam konteinerio inicializavimui reikia šiek tiek daugiau laisvo laiko. Jei neleisite konteineriui užbaigti inicializacijos, prieš tai jį sustabdydami ir paleisdami, duomenų bazė visada grąžins šią klaidą. Sprendimas - visiškai pašalinti konteinerio duomenis iš duomenų bazės.

Tai daroma taip:

$ docker-compose down

arba:

$ docker rm mysql-container

Toliau reikia ištrinti saugyklą (tomą) su neteisingai inicializuota duomenų baze. Tačiau pradžioje peržiūrėkite visų saugyklų sąrašą:

$ docker volume ls

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

Ištrynus:

$ docker volume rm volume_name

Dabar galite pradėti inicializuoti programą, tik palaukite, kol duomenų bazės serveris praneš, kad yra paruoštas, ir galėsite prie jo prisijungti.