Búsqueda de sitios web

Consejos útiles para solucionar errores comunes en MySQL


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

Lea también: Cómo instalar la última versión de MySQL en RHEL/CentOS y Fedora

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 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 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 ningún servidor MySQL (mysqld) ejecutándose en el sistema host o que ha especificado un nombre de archivo de socket Unix o TCP/IP< incorrecto. puerto al intentar conectarse al servidor.

Asegúrese de que el servidor se esté ejecutando verificando un proceso llamado mysqld en el host de su servidor de base de datos usando 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, 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, utilice el siguiente comando.

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

Según el resultado del comando anterior, el servicio MySQL ha fallado. En tal caso, puedes intentar reiniciarlo y comprobar 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

Para encontrar el puerto en el que está escuchando el servidor, use el 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 conexiones de red habilitadas y que el puerto de red que está utilizando para conectarse sea el configurado en el servidor.

Otros errores comunes que probablemente encontrará 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, usted está intentando conectarse utilizando un puerto TCP/IP, una canalización con nombre o un archivo de socket Unix diferente de aquel en el que el servidor está escuchando.

3. Errores de acceso denegado 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 hay 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 tiene permiso para conectarse al servidor a través del programa cliente que está utilizando y posiblemente el host desde el 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 IP remota usando los siguientes comandos en el shell 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 uno de los siguientes motivos: conectividad de red deficiente, tiempo de espera de conexión o un problema con valores BLOB 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 accede a un servidor de base de datos remoto.

Si se trata de un problema de tiempo de espera de conexión, particularmente cuando MySQL está intentando utilizar una conexión inicial al servidor, aumente el valor del parámetro connect_timeout. . Pero en el caso de valores BLOB que son mayores que max_allowed_packet, debes establecer un valor más alto para el max_allowed_packet en tu /etc. /my.cnf archivo de configuración 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, 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 (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. MySQL sin memoria

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 (UI) de configuración tiene una pestaña avanzada para indicadores. 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 configurarlo para obtener un mayor rendimiento.

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

Para obtener consejos sobre optimización y ajuste del rendimiento de MySQL, lea nuestro artículo: 15 consejos útiles para la optimización y el 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 el que tiene el problema. Tenga en cuenta que muchas fallas del servidor son causadas por archivos de datos o archivos de índice 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 crear 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 MySQL mientras ejecuta sus otras consultas:

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

Conclusión: determinar qué está causando un problema o un error

Aunque hemos analizado algunos problemas y errores comunes de MySQL y también hemos proporcionado formas de solucionarlos, lo más importante al diagnosticar un error es comprender lo que significa (en términos de su causa). .

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

  1. El primer paso y el más importante 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) en systemd para examinar el problema.
  3. También puede examinar el archivo de registro del sistema como /var/log/messages o similar para conocer los motivos de su problema.
  4. Intente utilizar herramientas como Mytop, looks, top, ps o htop para comprobar qué programa está consumiendo 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 algún proceso fuera de control, siempre puedes 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 de éste.
  7. Si el problema está en su programa cliente al intentar conectarse al servidor MySQL, verifique por qué no funciona bien e intente obtener algún resultado para solucionar el problema.

Quizás también te interese leer los 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 monitorear el rendimiento de MySQL/MariaDB en Linux
  5. 12 mejores prácticas 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. Enumera de manera exhaustiva los problemas y mensajes de error comunes que puede encontrar al usar MySQL, incluidos los que hemos discutido anteriormente y más.