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.
Parasti kļūda parādās, mēģinot izveidot savienojumu ar datubāzi, izmantojot PHP, konsoles klientu vai lietojot PhpMyAdmin:
Apskatīsim tālāk katru situāciju atsevišķi.
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
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
Veicot izmaiņas, neaizmirstiet pēc tam restartēt serveri:
$ sudo systemctl restart mysql
Vai arī:
$ sudo systemctl restart mariadb
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.
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.