Consells útils per resoldre els errors habituals a MySQL


MySQL és un sistema de gestió de bases de dades relacionals (RDMS) de codi obert àmpliament utilitzat propietat d'Oracle. Al llarg dels anys ha estat l'opció predeterminada per a aplicacions basades en web i encara segueix sent popular en comparació amb altres motors de bases de dades.

MySQL va ser dissenyat i optimitzat per a aplicacions web: forma part integral de les principals aplicacions basades en web com Facebook, Twitter, Viquipèdia, YouTube i moltes altres.

El vostre lloc o aplicació web funciona amb MySQL? En aquest article detallat, explicarem com resoldre problemes i errors comuns al servidor de bases de dades MySQL. Descriurem com determinar les causes dels problemes i què cal fer per resoldre'ls.

1. No es pot connectar al servidor MySQL local

Un dels errors habituals de connexió de client a servidor a MySQL és \ERROR 2002 (HY000): no es pot connectar al servidor MySQL local mitjançant el sòcol /var/run/mysqld/mysqld.sock (2).

Aquest error indica que no hi ha cap servidor MySQL (mysqld) en execució al sistema amfitrió o que heu especificat un nom de fitxer de socket Unix o un port TCP/IP incorrectes quan intenteu connectar-vos al servidor.

Assegureu-vos que el servidor s'està executant comprovant un procés anomenat mysqld a l'amfitrió del vostre servidor de base de dades utilitzant l'ordre grep junts com es mostra.

$ ps xa | grep mysqld | grep -v mysqld

Si les ordres anteriors no mostren cap sortida, el servidor de bases de dades no s'està executant. Per tant, el client no s'hi pot connectar. Per iniciar el servidor, executeu l'ordre systemctl següent.

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

Per verificar l'estat del servei MySQL, utilitzeu l'ordre següent.

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

A partir de la sortida de l'ordre anterior, el servei MySQL ha fallat. En aquest cas, podeu provar de reiniciar-lo i comprovar-ne l'estat una vegada més.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

A més, si el servidor s'executa tal com mostra l'ordre següent, però encara veieu l'error anterior, també hauríeu de verificar que el port TCP/IP estigui bloquejat per un tallafoc o qualsevol servei de bloqueig de ports.

$ ps xa | grep mysqld | grep -v mysqld

A l'ordre netstat tal com es mostra.

$ sudo netstat -tlpn | grep "mysql"

2. No es pot connectar al servidor MySQL

Un altre error de connexió que es troba habitualment és \(2003) No es pot connectar al servidor MySQL al servidor (10061), el que significa que s'ha rebutjat la connexió de xarxa.

Aquí, comenceu per comprovar que hi ha un servidor MySQL que s'executa al sistema, tal com es mostra a dalt. Assegureu-vos també que el servidor tingui les connexions de xarxa habilitades i que el port de xarxa que feu servir per connectar-vos sigui el configurat al servidor.

Altres errors comuns que és probable que trobeu quan intenteu connectar-vos al servidor MySQL són:

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)

Aquests errors indiquen que el servidor pot estar en execució, però, esteu intentant connectar-vos mitjançant un port TCP/IP, una canonada amb nom o un fitxer de socket Unix diferent del que escolta el servidor.

3. Accediu als errors denegats a MySQL

A MySQL, un compte d'usuari es defineix en termes d'un nom d'usuari i l'amfitrió o amfitrions del client des dels quals l'usuari es pot connectar al servidor. A més, un compte també pot tenir credencials d'autenticació, com ara una contrasenya.

Tot i que hi ha moltes causes diferents dels errors \Accés denegat, una de les causes habituals és la relacionada amb els comptes MySQL que el servidor permet que els programes client utilitzen quan es connecten. Indica que el nom d'usuari especificat a la connexió no té privilegis per accedir-hi. la base de dades.

MySQL permet la creació de comptes que permeten als usuaris del client connectar-se al servidor i accedir a les dades gestionades pel servidor. En aquest sentit, si trobeu un error d'accés denegat, comproveu si el compte d'usuari té permís per connectar-se al servidor mitjançant el programa client que esteu utilitzant i, possiblement, l'amfitrió des del qual prové la connexió.

Podeu veure quins privilegis té un compte determinat executant l'ordre SHOW GRANTS tal com es mostra.

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

Podeu concedir privilegis a un usuari concret en una base de dades específica a l'adreça IP remota mitjançant les ordres següents a l'intèrpret d'ordres de MySQL.

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

A més, els errors d'accés denegat també poden resultar de problemes amb la connexió a MySQL, consulteu els errors explicats anteriorment.

4. S'ha perdut la connexió al servidor MySQL

És possible que us trobeu amb aquest error a causa d'un dels motius següents: connectivitat de xarxa deficient, temps d'espera de connexió o un problema amb els valors BLOB que són més grans que max_allowed_packet. En cas d'un problema de connexió de xarxa, assegureu-vos que teniu una bona connexió de xarxa, especialment si accediu a un servidor de bases de dades remot.

Si es tracta d'un problema de temps d'espera de la connexió, especialment quan MySQL intenta utilitzar una connexió inicial al servidor, augmenteu el valor del paràmetre connect_timeout. Però en cas que els valors BLOB siguin més grans que max_allowed_packet, heu d'establir un valor més alt per al max_allowed_packet al vostre fitxer de configuració /etc/my.cnf a [mysqld] o [client] com es mostra.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Si no teniu accés al fitxer de configuració de MySQL, podeu establir aquest valor mitjançant l'ordre següent a l'intèrpret d'ordres de MySQL.

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

5. Massa connexions MySQL

En cas que un client MySQL trobi l'error \massa connexions, vol dir que totes les connexions disponibles estan utilitzant altres clients. El nombre de connexions (per defecte és 151) el controla el sistema max_connections variable; podeu solucionar el problema augmentant el seu valor per permetre més connexions al vostre fitxer de configuració /etc/my.cnf.

[mysqld]
max_connections=1000

6. MySQL sense memòria

En cas que executeu una consulta amb el programa client MySQL i trobeu l'error en qüestió, vol dir que MySQL no té prou memòria per emmagatzemar tot el resultat de la consulta.

El primer pas és assegurar-vos que la consulta és correcta, si ho és, feu el següent:

  • si utilitzeu el client MySQL directament, inicieu-lo amb --canvi ràpid, per desactivar els resultats de la memòria cau o
  • si utilitzeu el controlador MyODBC, la interfície d'usuari de configuració (UI) té una pestanya avançada per a les marques. Marqueu No emmagatzemi el resultat a la memòria cau.

Una altra gran eina és MySQL Tuner: un script útil que es connectarà a un servidor MySQL en execució i ofereix suggeriments sobre com es pot configurar per obtenir un rendiment superior.

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

Per obtenir consells d'optimització i optimització del rendiment de MySQL, llegiu el nostre article: 15 consells útils d'optimització i optimització del rendiment de MySQL/MariaDB.

7. MySQL continua fallant

Si trobeu aquest problema, hauríeu d'intentar esbrinar si el problema és que el servidor MySQL mor o si és el client amb un problema. Tingueu en compte que molts errors del servidor són causats per fitxers de dades corruptes o fitxers d'índex.

Podeu comprovar l'estat del servidor per establir quant de temps ha estat en funcionament.

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

Alternativament, executeu la següent comanda mysqladmin per trobar el temps d'activitat del servidor MySQL.

$ sudo mysqladmin version -p 

Altres solucions inclouen, entre d'altres, aturar el servidor MySQL i habilitar la depuració i, a continuació, tornar a iniciar el servei. Podeu provar de fer un cas de prova que es pugui utilitzar per repetir el problema. A més, obriu una finestra de terminal addicional i executeu l'ordre següent per mostrar les estadístiques del procés de MySQL mentre executeu les vostres altres consultes:

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

Tot i que hem analitzat alguns problemes i errors habituals de MySQL i també hem proporcionat maneres de solucionar-los i resoldre'ls, el més important amb el diagnòstic d'un error és entendre què significa (en termes de què l'està causant).

Llavors, com podeu determinar això? Els punts següents us guiaran sobre com esbrinar què és exactament el que causa un problema:

  1. El primer i més important pas és mirar els registres de MySQL que s'emmagatzemen al directori /var/log/mysql/. Podeu utilitzar utilitats de línia d'ordres com ara tail per llegir els fitxers de registre.
  2. Si el servei MySQL no s'inicia, comproveu-ne l'estat mitjançant systemctl o utilitzeu l'ordre journetctl (amb el senyalador -xe) sota systemd per examinar el problema.
  3. També podeu examinar el fitxer de registre del sistema, com ara /var/log/messages o similar, per raons del vostre problema.
  4. Proveu d'utilitzar eines com htop per comprovar quin programa ocupa tota la CPU o bloqueja la màquina o per inspeccionar si us quedeu sense memòria, espai en disc, descriptors de fitxers o algun altre recurs important.
  5. Suposant que el problema és un procés descontrolat, sempre podeu intentar eliminar-lo (utilitzant la utilitat pkill o kill) perquè MySQL funcioni amb normalitat.
  6. Suposant que el servidor mysqld està causant problemes, podeu executar l'ordre: mysqladmin -u root ping o mysqladmin -u root processlist per obtenir qualsevol resposta.
  7. Si el problema és amb el vostre programa client mentre intenteu connectar-vos al servidor MySQL, comproveu per què no funciona bé, proveu d'obtenir-ne qualsevol resultat per resoldre problemes.

També us agradaria llegir aquests articles relacionats amb MySQL següents:

  1. Aprèn MySQL/MariaDB per a principiants - Part 1
  2. Com supervisar bases de dades MySQL/MariaDB mitjançant Netdata a CentOS 7
  3. Com transferir totes les bases de dades MySQL del servidor antic al nou
  4. Mytop: una eina útil per supervisar el rendiment de MySQL/MariaDB a Linux
  5. 12 bones pràctiques de seguretat de MySQL/MariaDB per a Linux

Per obtenir més informació, consulteu el manual de referència de MySQL sobre problemes i errors comuns, que enumera de manera exhaustiva els problemes comuns i els missatges d'error que podeu trobar mentre feu servir MySQL, inclosos els que hem comentat anteriorment i més.