MySQL este un sistem de gestionare a bazelor de date relaționale open source utilizat pe scară largă (RDMS) detinut de Oracol. De-a lungul anilor a fost alegerea implicită pentru aplicațiile bazate pe web și rămâne populară în comparație cu alte motoare de baze de date.
Citește și: Cum se instalează cele mai recente MySQL pe RHEL / CentOS și Fedora
MySQL a fost proiectat și optimizat pentru aplicații web - face parte integrantă din principalele aplicații bazate pe web, cum ar fi Facebook, Stare de nervozitate, Wikipedia, YouTube, și multe altele.
Site-ul sau aplicația dvs. web este alimentat de MySQL? În acest articol detaliat, vom explica cum să depanați problemele și erorile obișnuite din MySQL server de baze de date. Vom descrie cum să determinăm cauzele problemelor și ce să facem pentru a le rezolva.
Una dintre erorile obișnuite de conexiune client-server în MySQL este „EROARE 2002 (HY000): Nu se poate conecta la serverul MySQL local prin socketul „/var/run/mysqld/mysqld.sock” (2)”.
Această eroare indică faptul că nu există MySQL Server (MySQL)
care rulează pe sistemul gazdă sau că ați specificat un nume de fișier socket Unix greșit sau TCP / IP port atunci când încercați să vă conectați la server.
Asigurați-vă că serverul rulează verificând un proces numit mysqld
pe gazda serverului de baze de date folosind ps comanda și comanda grep împreună așa cum se arată.
$ ps xa | grep mysqld | grep -v mysqld.
Dacă comenzile de mai sus nu afișează nicio ieșire, atunci serverul de baze de date nu rulează. Prin urmare, clientul nu se poate conecta la acesta. Pentru a porni serverul, executați următoarele comanda systemctl.
$ sudo systemctl pornește mysql # Debian / Ubuntu. $ sudo systemctl start mysqld # RHEL / CentOS / Fedora.
Pentru a verifica MySQL starea serviciului, utilizați următoarea comandă.
$ sudo systemctl status mysql # Debian / Ubuntu. $ sudo systemctl status mysqld # RHEL / CentOS / Fedora.
Din ieșirea comenzii de mai sus, MySQL serviciul a eșuat. Într-un astfel de caz, puteți încerca să îl reporniți și să verificați din nou starea acestuia.
$ sudo systemctl reporniți MySQL. $ sudo systemctl status mysql.
În plus, dacă serverul rulează așa cum se arată în următoarea comandă, dar vedeți totuși eroarea de mai sus, ar trebui să verificați și dacă TCP / IP portul este blocat de un firewall sau de orice serviciu de blocare a porturilor.
$ ps xa | grep mysqld | grep -v mysqld.
La găsiți portul pe care ascultă serverul, folosește comanda netstat așa cum se arată.
$ sudo netstat -tlpn | grep "mysql"
O altă eroare de conexiune întâlnită frecvent este „(2003) Nu se poate conecta la serverul MySQL pe „server” (10061)”, Ceea ce înseamnă că conexiunea la rețea a fost refuzată.
Aici, începeți prin a verifica dacă există un MySQL server care rulează pe sistem așa cum se arată mai sus. De asemenea, asigurați-vă că serverul are conexiuni de rețea activate și că portul de rețea pe care îl utilizați pentru a vă conecta este cel configurat pe server.
Alte erori frecvente pe care este posibil să le întâlniți atunci când încercați să vă conectați la serverul MySQL sunt:
EROARE 2003: Nu se poate conecta la serverul MySQL pe „host_name” (111) EROARE 2002: Nu se poate conecta la serverul MySQL local prin socketul "/tmp/mysql.sock" (111)
Aceste erori indică faptul că serverul ar putea rula, cu toate acestea, încercați să vă conectați folosind un TCP / IP port, denumit pipe sau fișier socket Unix diferit de cel pe care ascultă serverul.
În MySQL, un cont de utilizator este definit în termenii unui nume de utilizator și gazda clientului sau gazdele de la care utilizatorul se poate conecta la server. În plus, un cont poate avea, de asemenea, acreditări de autentificare, cum ar fi o parolă.
Deși există multe cauze diferite ale „Acces interzis”Erori, una dintre cauzele comune este legată de conturile MySQL pe care serverul le permite programelor client să le utilizeze la conectare. Indică că nume de utilizator specificat în conexiune nu are privilegii pentru a accesa baza de date.
MySQL permite crearea de conturi care permit utilizatorilor clienți să se conecteze la server și să acceseze datele gestionate de server. În acest sens, dacă întâlniți un eroare acces refuzat, verificați dacă contului de utilizator i se permite să se conecteze la server prin programul client pe care îl utilizați și, eventual, gazda de la care provine conexiunea.
Puteți vedea ce privilegii are un anumit cont rulând AFIȘAȚI SUBVENȚII
comanda așa cum se arată.
> AFIȘAȚI SUBVENȚII PENTRU „tecmint” @ „localhost”;
Puteți acorda privilegii unui anumit utilizator dintr-o bază de date specifică adresei IP la distanță folosind următoarele comenzi din shell-ul MySQL.
> acordați toate privilegiile pe * .test_db către „tecmint ”@'192.168.0.100”; > privilegii de spălare;
În plus, erori de acces refuzate poate rezulta și din probleme de conectare la MySQL, consultați erorile explicate anterior.
Este posibil să întâlniți această eroare din unul dintre următoarele motive: conectivitate de rețea slabă, expirarea conexiunii sau o problemă cu BLOB valori mai mari decât max_allowed_packet. În cazul unei probleme de conexiune la rețea, asigurați-vă că aveți o conexiune de rețea bună mai ales dacă accesați un server de baze de date la distanță.
Dacă este un expirarea conexiunii problemă, mai ales când MySQL încearcă să utilizeze o conexiune inițială la server, crește valoarea fișierului connect_timeout parametru. Dar în caz de Valorile BLOB care sunt mai mari decât max_allowed_packet, trebuie să setați o valoare mai mare pentru max_allowed_packet în dumneavoastră /etc/my.cnf fișier de configurare sub [mysqld]
sau [client]
secțiunea așa cum se arată.
[mysqld] connect_timeout = 100. max_allowed_packet = 500M.
Dacă MySQL fișierul de configurare nu este accesibil pentru dvs., atunci puteți seta această valoare utilizând următoarea comandă din shell-ul MySQL.
> SET GLOBAL connect_timeout = 100; > SET GLOBAL max_allowed_packet = 524288000;
În cazul în care a MySQL clientul întâlnește „prea multe conexiuni”Eroare, înseamnă că toate conexiunile disponibile sunt utilizate de alți clienți. Numărul de conexiuni (implicit este 151) este controlat de max_connections
variabila de sistem; puteți remedia problema creșterea valorii acesteia pentru a permite mai multe conexiuni în /etc/my.cnf Fișier de configurare.
[mysqld] max_connections = 1000.
În cazul în care executați o interogare folosind MySQL programul client și întâmpinați eroarea în cauză, înseamnă că MySQL nu are suficientă memorie pentru a stoca întregul rezultat al interogării.
Primul pas este să vă asigurați că interogarea este corectă, dacă este, faceți următoarele:
- comutator rapid
, pentru a dezactiva rezultatele cache sauUn alt instrument grozav este, Tuner MySQL - un script util care se va conecta la un server MySQL care rulează și oferă sugestii despre cum poate fi configurat pentru performanțe mai mari.
$ sudo apt-get install mysqltuner # Debian / Ubuntu. $ sudo yum install mysqltuner # RHEL / CentOS / Fedora. $ mysqltuner.
Pentru sfaturi de optimizare MySQL și de optimizare a performanței, citiți articolul nostru: 15 sfaturi utile MySQL / MariaDB pentru optimizarea și optimizarea performanțelor.
Dacă întâmpinați această problemă, ar trebui să încercați să aflați dacă problema este aceea că MySQL serverul moare sau dacă este clientul cu o problemă. Rețineți că multe blocări ale serverului sunt cauzate de fișiere de date corupte sau fișiere index.
Puteți verifica starea serverului pentru a stabili cât timp a funcționat.
$ sudo systemctl status mysql # Debian / Ubuntu. $ sudo systemctl status mysqld # RHEL / CentOS / Fedora.
Alternativ, rulați următoarele comanda mysqladmin pentru a găsi disponibilitatea serverului MySQL.
$ sudo versiunea mysqladmin -p
Alte soluții includ, dar nu se limitează la oprirea MySQL server și activarea depanării, apoi porniți din nou serviciul. Puteți încerca să creați un test care să poată fi folosit pentru a repeta problema. În plus, deschideți o fereastră de terminal suplimentară și rulați următoarea comandă pentru a afișa statisticile procesului MySQL în timp ce rulați celelalte interogări:
$ sudo mysqladmin -i 5 status. SAU. $ sudo mysqladmin -i 5 -r status
Deși ne-am uitat la unele comune MySQL probleme și erori și, de asemenea, au furnizat modalități de depanare și rezolvare a acestora, cel mai important lucru cu diagnosticarea unei erori este înțelegerea a ceea ce înseamnă (în ceea ce privește ceea ce o provoacă).
Deci, cum poți determina asta? Următoarele puncte vă vor ghida cu privire la modul de a afla ce anume cauzează o problemă:
/var/log/mysql/
. Puteți utiliza utilitare din linia de comandă, cum ar fi coada pentru a citi prin fișierele jurnal.-xe
flag) comandă sub systemd pentru a examina problema./var/log/messages
sau similar din motive pentru problema dvs.mysqladmin -u root ping
sau mysqladmin -u listă de procese rădăcină
pentru a obține orice răspuns de la acesta.Ați putea dori, de asemenea, să citiți următoarele articole legate de MySQL:
Pentru mai multe informații, consultați Manual de referință MySQL în ceea ce privește problemele și erorile frecvente, acesta enumeră în mod cuprinzător problemele obișnuite și mesajele de eroare pe care le puteți întâlni în timp ce utilizați MySQL, inclusiv cele pe care le-am discutat mai sus și multe altele.