Sfaturi utile pentru depanarea erorilor obișnuite în MySQL


MySQL este un sistem de gestionare a bazelor de date relaționale open source ( RDMS ) deținut de Oracle . Acesta a fost de-a lungul anilor alegerea implicită pentru aplicațiile bazate pe web și rămâne în continuare popular în comparație cu alte motoare de baze de date.

MySQL a fost proiectat și optimizat pentru aplicațiile web - face parte integrantă din aplicațiile web importante, cum ar fi Facebook , Twitter Wikipedia , YouTube și multe altele.

Este site-ul sau aplicația dvs. web alimentat de MySQL ? În acest articol detaliat, vom explica cum să depanem problemele și erorile frecvente în serverul de baze de date MySQL . Vom descrie cum să determinăm cauzele problemelor și ce să facem pentru a le rezolva.

1. Nu se poate conecta la serverul local MySQL

Unul dintre erorile comune de conectare la 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 (mysqld) care rulează pe sistemul gazdă sau că ați specificat un nume de fișier socket unic de Unix sau TCP/IP atunci când încercați să vă conectați la server.

Asigurați-vă că serverul rulează prin verificarea unui proces numit mysqld pe gazda serverului de bază de date utilizând comanda ps și comanda grep împreună, după cum se arată.

$ ps xa | grep mysqld | grep -v mysqld

Dacă comenzile de mai sus nu arată nicio ieșire, atunci serverul de bază de date nu se execută. Prin urmare, clientul nu se poate conecta la acesta. Pentru a porni serverul, executați următoarea comandă systemctl.

$ sudo systemctl start mysql        #Debian/Ubuntu
$ sudo systemctl start mysqld       #RHEL/CentOS/Fedora

Pentru a verifica starea serviciului MySQL , 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, serviciul MySQL a eșuat. Într-un astfel de caz, puteți încerca să-l reporniți și să-i verificați din nou starea.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

În plus, dacă serverul rulează așa cum este arătat de următoarea comandă, dar totuși vedeți eroarea de mai sus, trebuie să verificați că portul TCP/IP este blocat de un paravan de protecție sau de orice serviciu de blocare a porturilor .

$ ps xa | grep mysqld | grep -v mysqld

Pentru a găsi portul pe care serverul îl ascultă, utilizați comanda netstat după cum se arată.

$ sudo netstat -tlpn | grep "mysql"

2. Nu se poate conecta la serverul MySQL

O altă eroare de conectare întâlnită 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 server MySQL 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 comune pe care le veți întâlni când încercați să vă conectați la serverul MySQL sunt:

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Aceste erori indică faptul că este posibil ca serverul să ruleze, încercând totuși să vă conectați utilizând un port TCP/IP , o conductă numită sau un fișier socket Unix diferit de cel pe care îl asculta serverul.

3. Accesul erorilor refuzate în MySQL

În MySQL , un cont de utilizator este definit în termeni de nume de utilizator și gazdă sau gazde client de la care utilizatorul se poate conecta la server. În plus, un cont poate avea și acreditări de autentificare, cum ar fi o parolă.

Deși există multe cauze diferite ale erorilor Acces refuzate , una dintre cauzele comune se referă la conturile MySQL pe care serverul le permite programelor client să le utilizeze la conectare. Aceasta indică faptul că numele de utilizator specificat în conexiune nu are privilegii pentru a accesa baza de date.

MySQL permite crearea de conturi care permit utilizatorilor să se conecteze la server și să acceseze datele gestionate de server. În acest sens, dacă întâmpinați o eroare refuzată de acces , verificați dacă contul de utilizator este permis să se conecteze la server prin intermediul programului client pe care îl utilizați și, eventual, al gazdei de la care provine conexiunea .

Puteți vedea ce privilegii are un cont dat executând comanda SHOW GRANTS așa cum se arată.

> SHOW GRANTS FOR 'tecmint'@'localhost';

Puteți acorda privilegii unui anumit utilizator pe o bază de date specifică adresei IP la distanță folosind următoarele comenzi din shell-ul MySQL.

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

În plus, erorile de acces refuzate pot rezulta și din probleme legate de conectarea la MySQL, consultați erorile explicate anterior.

4. A pierdut conexiunea la serverul MySQL

S-ar putea să întâlniți această eroare din unul dintre următoarele motive: conectivitate slabă a rețelei , timeout la conectare sau o valoare BLOB 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 o problemă timeout , în special când MySQL încearcă să utilizeze o conexiune inițială la server, măriți valoarea parametrului connect_timeout . În cazul valorilor BLOB care sunt mai mari decât max_allowed_packet , trebuie să setați o valoare mai mare pentru max_allowed_packet în etc /my.cnf în secțiunea [mysqld] sau [client] după cum se arată.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Dacă fișierul de configurare MySQL nu este accesibil pentru dvs., 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;

5. Prea multe conexiuni MySQL

În cazul în care un client MySQL întâmpină eroarea " prea multe conexiuni ", înseamnă că toate conexiunile disponibile sunt utilizate de alți clienți. Numărul de conexiuni (implicit este 151 ) este controlat de variabila de sistem max_connections ; puteți remedia problema crescând valoarea acesteia pentru a permite mai multe conexiuni în fișierul de configurare /etc/my.cnf .

[mysqld]
max_connections=1000

6. Memorie MySQL

În cazul în care executați o interogare utilizând programul client MySQL și întâlniți eroarea în cauză, aceasta î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, atunci faceți următoarele:

  • if you are using MySQL client directly, start it with --quick switch, to disable cached results or
  • if you are using the MyODBC driver, the configuration user interface (UI) has an advanced tab for flags. Check “Do not cache result“.

Un alt instrument excelent este MySQL Tuner - un script util care se va conecta la un server MySQL rulat și oferă sugestii privind modul în care acesta poate fi configurat pentru o performanță mai mare.

$ sudo apt-get install mysqltuner     #Debian/Ubuntu
$ sudo yum install mysqltuner         #RHEL/CentOS/Fedora
$ mysqltuner

Pentru sfaturi de optimizare și de optimizare a performanței MySQL, citiți articolul nostru: 15 Sfaturi utile MySQL/MariaDB de optimizare și optimizare a performanței.

7. MySQL continuă să se prăbușească

Dacă întâmpinați această problemă, ar trebui să încercați să aflați dacă problema este că serverul MySQL moare sau dacă este clientul cu o problemă. Rețineți că multe accidente la server sunt cauzate de fișiere de date corupte sau de fișiere index.

Puteți verifica starea serverului pentru a stabili durata de funcționare a acestuia.

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Alternativ, executați următoarea comandă mysqladmin pentru a găsi timp de funcționare a serverului MySQL.

$ sudo mysqladmin version -p 

Alte soluții includ, dar nu se limitează la oprirea serverului MySQL și activarea depanării, apoi porniți din nou serviciul. Puteți încerca să faceți un test care poate fi folosit pentru a repeta problema. În plus, deschideți o fereastră de terminal suplimentară și executați următoarea comandă pentru a afișa statisticile proceselor MySQL în timp ce executați celelalte interogări:

$ sudo mysqladmin -i 5 status
OR
$ sudo mysqladmin -i 5 -r status 

Deși am analizat problemele și erorile MySQL comune și am furnizat și modalități de depanare și rezolvare a acestora, cel mai important lucru cu diagnosticarea unei erori este înțelegerea a ceea ce înseamnă (din punct de vedere al ceea ce o cauzează) .

Cum poți determina asta? Următoarele puncte vă vor îndruma asupra modului de a stabili care este exact cauza unei probleme:

  1. The first and most important step is to look into the MySQL logs which are stored in the directory /var/log/mysql/. You can use command line utilities such as tail to read through the log files.
  2. If MySQL service fails to start, check its status using systemctl or use the journetctl (with the -xe flag) command under systemd to examine the problem.
  3. You can also examine system log file such as /var/log/messages or similar for reasons for your problem.
  4. Try using tools such as Mytop, glances, top, ps, or htop to check which program is taking all CPU or is locking the machine or to inspect whether you are running out of memory, disk space, file descriptors, or some other important resource.
  5. Assuming that problem is some runaway process, you can always try to kill it (using the pkill or kill utility) so that MySQL works normally.
  6. Supposing that the mysqld server is causing problems, you can run the command: mysqladmin -u root ping or mysqladmin -u root processlist to get any response from it.
  7. If the problem is with your client program while trying to connect to the MySQL server, check why it is not working fine, try to get any output from it for troubleshooting purposes.

Ați putea dori, de asemenea, să citiți aceste articole în legătură cu articolele MySQL:

  1. Learn MySQL / MariaDB for Beginners – Part 1
  2. How to Monitor MySQL/MariaDB Databases using Netdata on CentOS 7
  3. How to Transfer All MySQL Databases From Old to New Server
  4. Mytop – A Useful Tool for Monitoring MySQL/MariaDB Performance in Linux
  5. 12 MySQL/MariaDB Security Best Practices for Linux

Pentru mai multe informații, consultați manualul de referință MySQL privind problemele și erorile obișnuite, cuprinde liste cuprinzătoare de probleme comune și mesaje de eroare pe care le puteți întâlni în timpul utilizării MySQL, inclusiv cele discutate mai sus și altele.