Eroarea 2006 numită MySQL Sever a dispărut înseamnă că serverul a refuzat să se conecteze, chiar dacă este în funcțiune. Există doar trei motive cunoscute pentru care apare această eroare. Primul motiv este că serverul este supraîncărcat. Timpul de așteptare a expirat. Al doilea motiv - clientul a trimis un pachet care este prea dureros. Al treilea motiv este că serverul nu a fost inițializat complet. În continuare vom analiza în detaliu care sunt motivele pentru care apare eroarea și cum să o rezolvăm.
De obicei, eroarea apare atunci când încercați să vă conectați la baza de date utilizând PHP, clientul consolă sau în cazul utilizării PhpMyAdmin:
Să examinăm în continuare fiecare situație în parte.
După cum am menționat la începutul acestui articol, una dintre cauzele posibile este timpul de așteptare expirat. Este posibil ca serverul să fi fost supraîncărcat și să nu poată face față sarcinii - procesarea tuturor conexiunilor. Pentru a înțelege cât timp durează solicitările serverului, puteți utiliza orice client de consolă și vă puteți conecta la server. Dacă sunteți capabil să faceți acest lucru, executați orice solicitare. Dacă interogările necesită prea mult timp pentru procesare, puteți optimiza MySQL utilizând un script special MySQLTuner. De obicei, creșteți dimensiunea pool-ului motorului InnoDB prin setarea parametrului innodb_buffer_pool_size
. Valoarea optimă este determinată cu ajutorul scriptului de mai sus.
Dacă este de 800 megabytes (poate fi orice altă dimensiune), setați-o:
$ sudo vi /etc/mysql/my.cnf
innodb_buffer_pool_size=800M
Există o altă modalitate de a rezolva problema. În acest scop, timpul de răspuns de la server este mărit. Pentru a efectua această sarcină, trebuie să modificați parametrul wait_timeout
. Acesta este timpul în secunde în timpul căruia trebuie să așteptați un răspuns de la server.
De exemplu:
wait_timeout=500
Atunci când efectuați modificări, nu uitați să reporniți apoi serverul:
$ sudo systemctl restart mysql
Sau:
$ sudo systemctl restart mariadb
Atunci când clientul unui utilizator creează prea multe pachete, serverul va genera această eroare. Dimensiunea pachetului disponibil (valoarea maximă) poate fi mărită cu ajutorul parametrului max_allowed_packet
.
De exemplu:
$ sudo vi /etc/mysql/my.cnf
max_allowed_packet=128M
Acordați o atenție deosebită clientului, deoarece dacă acesta trimite o mulțime de cereri, este evident că faceți ceva greșit. Cel puțin nu generați interogări către MySQL folosind bucle for
.
Dacă decideți să implementați MySQL sau MariaDB în Docker, fiți pregătit să întâmpinați o eroare similară. Inițializarea inițială a containerului necesită un pic mai mult timp liber. Dacă nu lăsați containerul să finalizeze inițializarea prin oprirea și pornirea sa mai întâi, baza de date va returna întotdeauna această eroare. Soluția este să eliminați complet datele containerului din baza de date.
Acest lucru se face astfel:
$ docker-compose down
sau:
$ docker rm mysql-container
Apoi, trebuie să ștergeți spațiul de stocare (volumul) cu baza de date inițializată incorect. Dar la început, uitați-vă prin lista tuturor depozitelor:
$ docker volume ls
După ștergere:
$ docker volume rm volume_name
Acum puteți începe inițializarea aplicației, așteptați doar până când serverul bazei de date vă spune că este gata și vă puteți conecta la acesta.