Maksājuma metodes Abuse

Ошибка 2006: MySQL serveris ir aizgājis prom

09.03.2021, 22:01

Kļūda 2006 ar nosaukumu MySQL Sever ir pazudusi nozīmē, ka serveris ir atteicies izveidot savienojumu, lai gan tas darbojas. Ir zināmi tikai trīs iemesli, kāpēc šī kļūda parādās. Pirmais iemesls ir tas, ka serveris ir pārslogots. Ir beidzies gaidīšanas laiks. Otrais iemesls - klients ir nosūtījis pārāk sāpīgu paketi. Trešais iemesls ir tāds, ka serveris nav pilnībā inicializēts. Tālāk mēs sīkāk aplūkosim, kādu iemeslu dēļ rodas kļūda un kā to novērst.

Kā novērst kļūdu

Parasti kļūda parādās, mēģinot izveidot savienojumu ar datubāzi, izmantojot PHP, konsoles klientu vai lietojot PhpMyAdmin:

PhpMyAdmin

Apskatīsim tālāk katru situāciju atsevišķi.

Beidzies laika ierobežojums

Kā minēts šī raksta sākumā, viens no iespējamiem iemesliem ir beidzies gaidīšanas laiks. Var būt, ka serveris ir pārslogots un nespēj tikt galā ar slodzi - apstrādāt visus savienojumus. Lai saprastu, cik ilgi tiek gaidīti servera pieprasījumi, varat izmantot jebkuru konsoles klientu un izveidot savienojumu ar serveri. Ja varat to izdarīt, izpildiet jebkuru pieprasījumu. Ja pieprasījumu apstrāde aizņem pārāk daudz laika, varat optimizēt MySQL, izmantojot īpašu skriptu MySQLTuner. Parasti palieliniet InnoDB dzinēja pūla lielumu, iestatot parametru innodb_buffer_pool_size. Optimālo vērtību nosaka, izmantojot iepriekš minēto skriptu.

Ja tas ir 800 megabaiti (tas var būt jebkurš cits izmērs), iestatiet to:

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

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

Ir vēl viens veids, kā atrisināt šo problēmu. Šim nolūkam tiek palielināts servera atbildes laiks. Lai veiktu šo uzdevumu, ir jāmaina parametrs wait_timeout. Tas ir laiks sekundēs, kurā jāgaida atbilde no servera.

Piemēram:

wait_timeout=500

параметр wait_timeout

Veicot izmaiņas, neaizmirstiet pēc tam restartēt serveri:

$ sudo systemctl restart mysql

Vai arī:

$ sudo systemctl restart mariadb

Pārāk liela pakete

Ja lietotāja klients izveido pārāk daudz pakešu, serveris ģenerē šo kļūdu. Pieejamo paketes lielumu (maksimālo vērtību) var palielināt, izmantojot parametru max_allowed_packet.

Piemēram:

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

Pievērsiet īpašu uzmanību klientam, jo, ja tas sūta daudz pieprasījumu, acīmredzot jūs kaut ko darāt nepareizi. Vismaz neradiet pieprasījumus MySQL, izmantojot for cilpas.

Serveris ir nepareizi inicializēts

Ja nolemjat izvietot MySQL vai MariaDB Docker vidē, esiet gatavi saskarties ar līdzīgu kļūdu. Konteinera sākotnējā inicializācija prasa nedaudz vairāk brīvā laika. Ja neļaujiet konteineram pabeigt inicializāciju, vispirms to apstādinot un palaižot, datubāze vienmēr atgriezīs šo kļūdu. Risinājums ir pilnībā noņemt konteinera datus no datubāzes.

To var izdarīt šādi:

$ docker-compose down

vai:

$ docker rm mysql-container

Tālāk jāizdzēš krātuve (sējums) ar nepareizi inicializēto datubāzi. Bet sākumā apskatiet visu glabātavu sarakstu:

$ docker volume ls

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

Pēc dzēšanas:

$ docker volume rm volume_name

Tagad varat sākt lietojumprogrammas inicializēšanu, tikai pagaidiet, kamēr datubāzes serveris paziņos, ka tas ir gatavs, un jūs varēsiet tam pieslēgties.