sql >> Base de Datos >  >> RDS >> Mysql

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 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 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 MySQL servidor de base de datos. 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 MySQL servidor (mysqld) ejecutándose 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 comprobando un proceso llamado mysqld en 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 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 MySQL estado del servicio, use el siguiente comando.

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

Desde el resultado del comando anterior, MySQL el servicio 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 TCP/IP el puerto 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 escucha 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 con frecuencia es “(2003) No se puede conectar al servidor MySQL en el ‘servidor’ (10061) ”, lo que significa que la conexión a la red ha sido rechazada.

Aquí, comience por verificar que haya un MySQL servidor que se ejecuta 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 probablemente encuentre 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 usando un TCP/IP puerto, canalización con nombre o archivo de socket Unix diferente del que está escuchando el servidor.

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 "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 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 desde el que proviene la conexión.

Puede ver qué privilegios tiene una cuenta determinada ejecutando SHOW GRANTS comando 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, errores de acceso denegado también puede deberse a problemas con la conexión a MySQL, consulte los errores explicados anteriormente.

4. Pérdida de conexión con el servidor MySQL

Puede encontrar este error debido a una de las siguientes razones:mala conectividad de red , tiempo de espera de conexión o un problema con BLOB valores 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 tiempo de espera de conexión problema, particularmente cuando MySQL está intentando usar una conexión inicial al servidor, aumente el valor de connect_timeout parámetro. Pero en el caso de valores BLOB que son más grandes que max_allowed_packet , debe establecer un valor más alto para el max_allowed_packet en su /etc/my.cnf archivo de configuración en [mysqld] o [client] sección como se muestra.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Si el MySQL el archivo de configuración no es accesible para usted, 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 MySQL el cliente encuentra el mensaje “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 max_connections variable del sistema; puede remediar el problema aumentando su valor para permitir más conexiones en su /etc/my.cnf archivo de configuración.

[mysqld]
max_connections=1000

6. MySQL sin memoria

En caso de que ejecute una consulta utilizando MySQL programa cliente y encuentra 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 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 MyODBC controlador, la interfaz de usuario (UI) de configuración tiene una pestaña avanzada para indicadores. Marque "No guardar en caché el resultado “.

Otra gran herramienta es MySQL Tuner – una secuencia de comandos útil que se conectará a un servidor MySQL en ejecución y brinda 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 conocer los consejos 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 MySQL servidor muere o si es el cliente con un problema. Tenga en cuenta que muchos bloqueos del servidor son causados ​​por archivos de datos o archivos de índice corruptos.

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 MySQL server y habilitando la depuración, luego inicie 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 

El resultado final:determinar qué está causando un problema o un error

Aunque hemos visto algunos MySQL comunes problemas y errores y también proporcionó formas de solucionarlos y resolverlos, lo más importante al diagnosticar un error es comprender lo que significa (en términos de lo que lo está causando).

Entonces, ¿cómo puedes determinar esto? Los siguientes puntos lo guiarán sobre cómo determinar exactamente qué está causando 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 journetctl (con -xe flag) bajo systemd para examinar el problema.
  3. También puede examinar el archivo de registro del sistema como /var/log/messages o similar por las razones de su problema.
  4. Intente usar herramientas como Mytop, looks, top, ps o htop para verificar qué programa está tomando 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 algo más. otro recurso importante.
  5. Suponiendo que el problema sea un proceso fuera de control, siempre puede intentar eliminarlo (usando la utilidad pkill o kill) para que MySQL funcione normalmente.
  6. Suponiendo que mysqld servidor está causando problemas, puede ejecutar el comando:mysqladmin -u root ping o mysqladmin -u root processlist para obtener alguna respuesta de él.
  7. Si el problema es con su programa cliente mientras intenta conectarse al servidor MySQL, verifique por qué no funciona bien, intente obtener algún resultado para solucionar problemas.

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

  1. Aprender 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 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 integral los problemas comunes y los mensajes de error que puede encontrar al usar MySQL, incluidos los que hemos discutido anteriormente y más.