Consejos útiles para solucionar errores comunes en MySQL


MySQL es un sistema de gestión de bases de datos relacionales de código abierto ampliamente utilizado ( RDMS ) propiedad de Oracle . A lo largo de los años, ha sido la opción predeterminada para las aplicaciones basadas en web y sigue siendo popular en comparación con otros motores de base de datos.

MySQL se diseñó y optimizó para aplicaciones web: forma parte integral de las principales aplicaciones basadas en la web, como Facebook , Twitter , Wikipedia , YouTube y muchos otros.

¿Su sitio o aplicación web funciona con MySQL ? En este artículo detallado, explicaremos cómo solucionar problemas y errores comunes en el servidor de base de datos MySQL . Describiremos cómo determinar las causas de los problemas y qué hacer para resolverlos.

1. No se puede conectar al servidor MySQL local

Uno de los errores comunes de conexión de cliente a servidor en MySQL es " ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/var/run/mysqld/mysqld.sock' (2) ”.

Este error indica que no se está ejecutando MySQL servidor (mysqld) en el sistema host o que ha especificado un nombre de archivo de socket Unix incorrecto o TCP/IP puerto al intentar conectarse al servidor.

Asegúrese de que el servidor se está ejecutando al verificar un proceso llamado mysqld en el servidor de su servidor de base de datos utilizando el comando ps y el comando grep juntos, como se muestra.

$ ps xa | grep mysqld | grep -v mysqld

Si los comandos anteriores no muestran resultados, el servidor de la base de datos no se está ejecutando. Por lo tanto, el cliente no puede conectarse a él. Para iniciar el servidor, ejecute el siguiente comando systemctl.

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

Para verificar el estado del servicio MySQL , use el siguiente comando.

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

Desde la salida del comando anterior, el servicio MySQL ha fallado. En tal caso, puede intentar reiniciarlo y verificar su estado una vez más.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Además, si el servidor se ejecuta como se muestra en el siguiente comando, pero sigue viendo el error anterior, también debe verificar que el puerto TCP/IP esté bloqueado por un firewall o cualquier servicio de bloqueo de puertos .

$ ps xa | grep mysqld | grep -v mysqld

Para encontrar el puerto que el servidor está escuchando, use el comando netstat como se muestra.

$ sudo netstat -tlpn | grep "mysql"

2. No se puede conectar al servidor MySQL

Otro error de conexión frecuente es " (2003) No se puede conectar al servidor MySQL en" servidor "(10061) ", lo que significa que se ha rechazado la conexión de red.

Aquí, comience comprobando que hay un servidor MySQL ejecutándose en el sistema como se muestra arriba. También asegúrese de que el servidor tenga habilitadas las conexiones de red y que el puerto de red que está utilizando para conectarse sea el configurado en el servidor.

Otros errores comunes que es probable que encuentre al intentar conectarse al servidor MySQL son:

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)

Estos errores indican que el servidor podría estar ejecutándose, sin embargo, está intentando conectarse utilizando un puerto TCP/IP , una tubería con nombre o un archivo de socket Unix diferente del que el servidor está escuchando.

3. Acceder a los errores denegados en MySQL

En MySQL , una cuenta de usuario se define en términos de nombre de usuario y el host del cliente o hosts desde los que el usuario puede conectarse al servidor. Además, una cuenta también puede tener credenciales de autenticación, como una contraseña.

Aunque hay muchas causas diferentes de errores " Acceso denegado ", una de las causas comunes se relaciona con las cuentas MySQL que el servidor permite que los programas cliente usen al conectarse. Indica que el nombre de usuario especificado en la conexión no tiene privilegios para acceder a la base de datos.

MySQL permite la creación de cuentas que permiten a los usuarios clientes conectarse al servidor y acceder a los datos administrados por el servidor. En este sentido, si encuentra un error de acceso denegado , verifique si la cuenta de usuario tiene permiso para conectarse al servidor a través del programa cliente que está utilizando, y posiblemente el host del que proviene la conexión .

Puede ver qué privilegios tiene una cuenta determinada ejecutando el comando SHOW GRANTS como se muestra.

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

Puede otorgar privilegios a un usuario particular en una base de datos específica a la dirección de IP remota usando los siguientes comandos en el shell de MySQL.

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

Además, los errores de acceso denegado también pueden deberse a problemas con la conexión a MySQL, consulte los errores explicados anteriormente.

4. Perdió la conexión con el servidor MySQL

Puede encontrar este error debido a una de las siguientes razones: conectividad de red deficiente , tiempo de espera de conexión o un problema con BLOB valores que son más grandes max_allowed_packet . En caso de un problema de conexión de red, asegúrese de tener una buena conexión de red, especialmente si está accediendo a un servidor de base de datos remoto.

Si se trata de un problema de tiempo de espera de conexión , especialmente cuando MySQL está intentando usar una conexión inicial con el servidor, aumente el valor del parámetro connect_timeout . Pero en el caso de los valores BLOB que sean mayores que max_allowed_packet , debe establecer un valor más alto para el max_allowed_packet en su /etc El archivo de configuración /my.cnf en la sección [mysqld] o [client] como se muestra.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Si no puede acceder al archivo de configuración MySQL , entonces puede establecer este valor usando el siguiente comando en el shell de MySQL.

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

5. Demasiadas conexiones MySQL

En caso de que un cliente MySQL encuentre el error “ demasiadas conexiones ”, significa que todas las conexiones disponibles están en uso por otros clientes. El número de conexiones (el valor predeterminado es 151 ) está controlado por la variable del sistema max_connections ; puede solucionar el problema aumentando su valor para permitir más conexiones en su archivo de configuración /etc/my.cnf .

[mysqld]
max_connections=1000

6. Fuera de memoria MySQL

En caso de que ejecute una consulta utilizando el programa cliente MySQL y se encuentre con el error en cuestión, significa que MySQL no tiene suficiente memoria para almacenar todo el resultado de la consulta.

El primer paso es asegurarse de que la consulta sea correcta, si es así, haga lo siguiente:

  • 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“.

Otra gran herramienta es, MySQL Tuner , una secuencia de comandos útil que se conectará a un servidor MySQL en ejecución y le dará sugerencias sobre cómo puede configurarse para un mayor rendimiento.

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

Para obtener consejos de optimización de rendimiento y optimización de MySQL, lea nuestro artículo: 15 Consejos útiles de optimización y optimización de rendimiento de MySQL/MariaDB.

7. MySQL sigue rompiendo

Si encuentra este problema, debe intentar averiguar si el problema es que el servidor MySQL muere o si es el cliente el que tiene un problema. Tenga en cuenta que muchos fallos del servidor son causados ​​por archivos de datos dañados o archivos de índice.

Puede verificar el estado del servidor para establecer cuánto tiempo ha estado funcionando.

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

Alternativamente, ejecute el siguiente comando mysqladmin para encontrar el tiempo de actividad del servidor MySQL.

$ sudo mysqladmin version -p 

Otras soluciones incluyen, entre otras, detener el servidor MySQL y habilitar la depuración, y luego volver a iniciar el servicio. Puede intentar hacer un caso de prueba que pueda usarse para repetir el problema. Además, abra una ventana de terminal adicional y ejecute el siguiente comando para mostrar las estadísticas del proceso de MySQL mientras ejecuta sus otras consultas:

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

Aunque hemos analizado algunos problemas y errores MySQL y también hemos proporcionado formas de solucionarlos y solucionarlos, lo más importante para diagnosticar un error es comprender qué significa (en términos de qué lo está causando) .

Entonces, ¿cómo se puede determinar esto? Los siguientes puntos lo guiarán sobre cómo determinar qué está causando exactamente un problema:

  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.

También te puede interesar leer los siguientes artículos relacionados con 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

Para obtener más información, consulte el manual de referencia de MySQL sobre Problemas y errores comunes, enumera de manera integral los problemas comunes y los mensajes de error que puede encontrar al usar MySQL, incluidos los que hemos analizado anteriormente y más.