Consejos útiles para solucionar errores comunes en MySQL


MySQL es un sistema de administración de bases de datos relacionales (RDMS) de código abierto ampliamente utilizado 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 bases de datos.

MySQL fue diseñado y optimizado para aplicaciones web; forma parte integral de las principales aplicaciones basadas en web como Facebook, Twitter, Wikipedia, YouTube y muchas otras.

¿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 solucionarlos.

1. No puedo conectarme 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 hay un servidor MySQL (mysqld) ejecutándose en el sistema host o que ha especificado un nombre de archivo de socket Unix o un puerto TCP/IP incorrectos al intentar conectarse al servidor.

Asegúrese de que el servidor se esté ejecutando comprobando un proceso llamado mysqld en el servidor de su base de datos utilizando el comando grep juntos como se muestra.

$ ps xa | grep mysqld | grep -v mysqld

Si los comandos anteriores no muestran ningún resultado, entonces 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 el resultado 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 está ejecutando como se muestra en el siguiente comando, pero aún ve 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

Al comando netstat como se muestra.

$ sudo netstat -tlpn | grep "mysql"

2. No puedo conectarme al servidor MySQL

Otro error de conexión que se encuentra comúnmente es "(2003) No se puede conectar al servidor MySQL en el" servidor "(10061)", lo que significa que la conexión de red ha sido rechazada.

Aquí, comience verificando que haya 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 de que el puerto de red que está utilizando para conectarse sea el configurado en el servidor.

Otros errores comunes que probablemente encontrará cuando intente 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 canalización con nombre o un archivo de socket Unix diferente del que está escuchando el servidor.

3. Acceder a errores denegados en MySQL

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

Aunque existen muchas causas diferentes de errores de "Acceso denegado", una de las causas comunes está relacionada con las cuentas MySQL que el servidor permite que los programas cliente utilicen 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 del cliente 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 puede 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 en particular en una base de datos específica a la dirección 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. Conexión perdida al 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 los valores BLOB que son mayores que 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 utilizar una conexión inicial con el servidor, aumente el valor del parámetro connect_timeout. Pero en el caso de valores BLOB mayores que max_allowed_packet, debe establecer un valor más alto para max_allowed_packet en su archivo de configuración /etc/my.cnf en [mysqld] o [client] sección como se muestra.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Si no puede acceder al archivo de configuración de MySQL, 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 siendo utilizadas por otros clientes. El número de conexiones (predeterminado es 151) está controlado por la variable de 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. Sin memoria MySQL

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

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

  • si está utilizando el cliente MySQL directamente, inícielo con --quick switch , para deshabilitar los resultados almacenados en caché o
  • si está utilizando el controlador MyODBC, la interfaz de usuario de configuración (UI) tiene una pestaña avanzada para banderas. Marque "No almacenar en caché el resultado".

Otra gran herramienta es MySQL Tuner, un script útil que se conectará a un servidor MySQL en ejecución y ofrece sugerencias sobre cómo se puede configurar para un mayor rendimiento.

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

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

7. MySQL sigue fallando

Si encuentra este problema, debe intentar averiguar si el problema es que el servidor MySQL muere o si es el cliente con un problema. Tenga en cuenta que muchos fallos del servidor se deben a archivos de índice o archivos de datos dañados.

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

$ 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 iniciar el servicio nuevamente. 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 comunes de MySQL y también hemos proporcionado formas de solucionarlos y solucionarlos, lo más importante al diagnosticar un error es comprender lo que significa (en términos de su causa).

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

  1. El primer y más importante paso es buscar en los registros de MySQL que están almacenados en el directorio /var/log/mysql/. Puede utilizar utilidades de línea de comandos como tail para leer los archivos de registro.
  2. Si el servicio MySQL no se inicia, verifique su estado usando systemctl o use el comando journetctl (con el indicador -xe ) debajo de systemd para examinar el problema.
  3. También puede examinar el archivo de registro del sistema como /var/log/messages o similar para conocer las razones de su problema.
  4. Intente usar herramientas como htop para verificar qué programa está ocupando toda la CPU o está bloqueando la máquina o para inspeccionar si se está quedando sin memoria, espacio en disco, descriptores de archivos o algún otro recurso importante.
  5. Suponiendo que el problema es un proceso fuera de control, siempre puede intentar eliminarlo (usando la utilidad pkill o kill) para que MySQL funcione normalmente.
  6. Suponiendo que el servidor mysqld está causando problemas, puede ejecutar el comando: mysqladmin -u root ping o mysqladmin -u root processlist para obtener cualquier respuesta.
  7. Si el problema está en su programa cliente mientras intenta conectarse al servidor MySQL, verifique por qué no funciona bien, intente obtener algún resultado de él para fines de resolución de problemas.

También le gustaría leer estos siguientes artículos relacionados con MySQL:

  1. Aprenda MySQL/MariaDB para principiantes - Parte 1
  2. Cómo monitorear bases de datos MySQL/MariaDB usando Netdata en CentOS 7
  3. Cómo transferir todas las bases de datos MySQL del servidor antiguo al nuevo
  4. Mytop: una herramienta útil para supervisar el rendimiento de MySQL/MariaDB en Linux
  5. 12 prácticas recomendadas de seguridad de MySQL/MariaDB para Linux

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