¡Te damos la bienvenida al nuevo sysarmy --help! Para recuperar tu usuario pedí un password reset.

Problemas al tratar de conectarme a MySQL

editado January 2021 en Legacy
Buenas noches, mi nombre es Kevin y soy nuevo en el sitio. Con respecto a mi problema, hace desde el
jueves que vengo renegando con MySQL. Estoy desarrollando un proyecto en PHP para una materia de la carrera y mi idea era ponerme a programar gran parte del fin de semana ya que no me queda mucho tiempo. Pero hasta ahora mucho no puedo hacer ya que no me logro conectar al servidor, que es local. Como servidor utilizo WAMPSERVER, y según parece no hay error alguno, pero MySQL Workbench me tira lo siguiente:

"Can't connect to MySQL server on 'localhost' (10061)".

Y Laravel esto otro:

"SQLSTATE[HY000] [2002] No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión. (SQL: select * from `libros` where `destacado` = 1)".

El jueves ya había notado que no funcionaba del todo bien, ya que cuando me puse a probar las ABM que ya tenía listas no andaban, había hecho dos altas y varias modificaciones, pero sólo pasó un alta y ninguna modificación. Al seguir intentando me apareció el mensaje de Laravel que puse más arriba, recargué varias veces el sitio y luego todo anduvo con normalidad, pero desde ayer ya no funciona para nada y no sé que más hacer. Por un momento pensé que era yo que había programado algo mal, pero MySQL Workbench tampoco se puede conectar.

Ya googlee, reinicié y apagué todo pero no hay forma, les agredeceré mucho si me dan una mano ya que necesito avanzar lo más rápido posible.
Etiquetado:

Respuestas

  • En general para analizar el problema de conexión a la base de datos MySQL lo que uno podría hacer es lo siguiente:

    1. Verificar si el proceso de la base de datos (BDD) está ejecutándose
    2. Verificar la conexión a la BDD
      1. Verificar los parámetros de conexión del programa con el que se quiere conectar a la DB
      2. Verificar que el puerto está corriendo el proceso de la DB coincide con el puerto de la conexión
      3. Verificar si el usuario tiene privilegios para conectarse
    3. Ver los logs de la DB en busca de errores

    NOTA

    Si la conexión a la BDD se hace de manera remota (es decir el programa y la BDD están en distintos equipos), también habría que verificar que se pueda llegar desde donde se ejecuta el programa hasta donde está ejecutando el proceso de la DB y que el puerto es visible.

    >

    Por tratarse de WampServer estoy asumiendo que programa y BDD están en el mismo equipo.

    Veamos los pasos descriptos arriba en detalle para el caso puntual WampServer:

    1. Verificar si el proceso de la base de datos (BDD) está ejecutándose

    Desde WampServer

    1. Hacer click izquierdo sobre el ícono de WampServer
    2. Ir a MySQL
    3. Ver el estado del proceso
      1. El proceso está ejecutándose si se vé un tilde verde a la izquierda de Service administration 'wampmysqld64' en WampServer de 64 bits o Service administration 'wampmysqld' para la versión de 32 bits.

    Proceso BDD ejecutándose visto desde WampServer

    1. Si en Service administration 'wampmysqld64' (o Service administration 'wampmysqld') no aparece el tilde verde posicionarse arriba de Service administration 'wampmysqld64' (o Service administration 'wampmysqld'), se abrirá un nuevo menú, sobre este nuevo menú hacer click en Start/Resume Service.

    Desde servicios de Windows

    1. En la cuadro de búsqueda de Windows, buscar la aplicación Run o Ejecutar (dependiendo si el idioma de Windows es inglés o español) y ejecutarla.
      Comando RUN de Windows

    2. En el cuandro de diálogo de Run (o Ejecutar) ingresar service.msc y presionar OK.

    Ejecutar services.msc

    1. En la ventana de Services (o Servicios) buscar el servicio con nombre wampmysqld64 para WampServer de 64 bits (o wampmysqld para la versión 32 bits).
      1. El servicio está corriendo si el Status (o Estado) es Running (o En ejecución).
      2. Si no aparece valor en la columna Status (o Estado) hacer click sobre la línea del servicio, luego hacer click derecho y en el menú que aparece hacer click sobre Start (o Iniciar).
        Servicio wampmysqld

    2. Verificar la conexión a la BDD

    2.1. Verificar los parámetros de conexión del programa con el que se quiere conectar a la DB.

    Mirar en el programa se quiere conectar a la BDD los valores de conexión:

    • host: donde corre este caso debería figurar localhost
    • port: es el puerto que utiliza la BDD para recibir peticiones. Por defecto MySQL utiliza 3306
    • user: el usuario con el cual se quiere conectar a la DBB
    • password: contraseña del usuario (user)

    2.2. Verificar que el puerto está corriendo el proceso de la DB coincide con el puerto de la conexión

    Si el valor del puerto obtenido con esta verificación coincide con el puerto que utiliza el programa continuar con los chequeos.

    En caso contrario cambiar el valor del puerto utilizado por el programa al que utiliza MySQL y volver a ejecutar el programa para ver si se solucionó el problema.

    Verificación del puerto utilizado desde WampServer

    1. Hacer click derecho sobre el ícono de WampServer
    2. Ir a Tools

      1. En el menú aparecerá el ítem Test port 3306 y si se cambió el puerto desde WampServer también aparecerá el ítem Test MySQL port used: PUERTO donde PUERTO es el valor del puerto utilizado por MySQL.

        1. Hacer click en Test port 3306 si sólo aparece dicho ítem. Esta acción abrirá una ventana que mostrará el resultado del chequeo
          Test Port Tool

        2. Hacer click Test MySQL port used: PUERTO si sólo aparece dicho ítem. Esta acción abrirá una ventana que mostrará el resultado del chequeo

        3. Si el chequeo en ambos casos falla y el proceso está ejecutándose hacer lo indicando en esta sección en Desde línea de comando

    Verificación del puerto utilizado desde línea de comando

    1. Abrir CMD como Administrator (Línea de comando como Administrador)
    2. Ejecutar netstat -a -b
    3. Buscar en la salida los puertos asociado al proceso mysqld

    Ejecucion netstat

    2.3. Verificar si el usuario tiene privilegios para conectarse

    El usuario utilizado podría no tener permisos para conectarse a la instancia de MySQL. Por ejemplo, que tenga permisos para hacerlo desde la ubicación desde la cual se está realizando la conexión (ej: localhost).

    Si el usuario tiene permisos para conectarse desde dicha ubicación continuar. Caso contrario cambiar los privilegios y volver a probar conectarse.

    Los permisos para conectarse se pueden verificar mediante una consulta SQL a las tablas de administración de la instancia de MySQL. Para ello primero hay que conectarse a la instancia utilizando un usuario con privilegios de administración (ej: root).

    NOTA

    El usuario root en WampServer por defecto no tiene password. Por lo que es posible conectarse sin necesidad del parámetro correspondiente.

    Conectarse a la instancia de MySQL desde WampServer

    1. Hacer click izquierdo sobre el ícono de WampServer
    2. Ir a MySQL
    3. Hacer click en MysQL console

    troubleshooting-006a-wampserver-console

    Conectarse a la instancia de MySQL desde línea de comandos

    1. Abrir CMD como Administrator (Línea de comando como Administrador)
    2. Ir a la ruta donde está el ejecutable mysql.exe. Usualmente UBICACION_INSTALACIO_WAMPSERVER\bin\mysql\mysqlNUMERO_VERSION\bin.

      Por ejemplo: C:\wamp64\bin\mysql\mysql5.7.31\bin

    3. Ejecutar mysql.exe para conectarse con el usuario de administración ingresando luego su password mediante:

      mysql -uNOMBRE_USUARIO -p

      En el caso del usuario root, si este no tuviera defina la password (ver nota arriba) basta con ejecutar mysql -uroot.

    Una vez conectados a la instancia ejecutar los siguientes comandos SQL:

    USE MYSQL;
    SELECT
    user,
    host,
    account_locked,
    password_expired
    FROM mysql.user;
    

    troubleshooting-006b-user-connections

    Ahí mostrará desde donde se pueden conectar (host) los distintos usuarios (user) , además indica si la cuenta está bloqueada (account_locked) o su password expiró (password_expired).

    Para dar permisos para utilizar algún objecto de determinada base de datos dentro de la instancia de MySQL basta con ejecutar el siguiente comando:

    GRANT USAGE ON NOMBRE_DB_O_WILDCARD.OBJECTO_DB_O_WILDCARD TO 'NOMBRE_USUARIO@NOMBRE_DE_HOST_O_IP_O_WILDCARD';
    

    Donde:

    • NOMBRE_DB_O_WILDCARD: indica a la base de datos de la instancia de MySQL a la que se permite conectar. Se puede usar * que permite indicar que son todas las bases de datos de la instancia de MySQL.
    • OBJECTO_DB_O_WILDCARD: indica a que objeto dentro de la DB se permite el uso, como una tabla, un vista o un procedimiento almacenado. Se puede usar * para indicar que son todos los objetos de la base de datos.
    • NOMBRE_USUARIO: Indica el usuario al que se le da el permiso
    • NOMBRE_DE_HOST_O_IP_O_WILDCARD: Indica desde donde se permite conectar al usuario, por ejemplo localhost. El comodin en este caso es % y se puede utilizar para indicar cualquier host o IP, excepto locahost.

    NOTA

    El comando no altera los permisos del usuario (ej: SELECT o INSERT) sólo permite el uso (o conexión).

    Ejemplos:

    -- Dar acceso a la base de datos de nombre SYSARMY_DB al usuario ramon desde cualquier host excepto localhost
    GRANT USAGE ON SYSARMY_DB.* TO 'ramon@%';
    -- Dar acceso a la base de datos de nombre SYSARMY_DB al usuario ramon desde localhost
    GRANT USAGE ON SYSARMY_DB.* TO 'ramon@localhost';
    -- Dar acceso a todas las base de datos usuario ramon desde cualquier host excepto localhost
    GRANT USAGE ON *.* TO 'ramon@%';
    -- Dar acceso a todas las base de datos usuario ramon desde localhost
    GRANT USAGE ON *.* TO 'ramon@localhost';
    

    3. Ver los logs de la DB en busca de errores

    Si lo anterior falla, puede que el problema sea otro. Como por ejemplo problemas en los archivos de almacenamiento para el tipo motor de almacenamiento elegido (ej: InnoDB o MyISAM).

    Para ello lo mejor es mirar el log en busca de errores. Para los errores utilizar el código de error para buscar soluciones en la Web o dejar la consulta en /help de SysArmy.

    Abrir logs desde WampServer

    1. Hacer click izquierdo sobre el ícono de WampServer
    2. Ir a MySQL
    3. Hacer click en MysQL Log

    troubleshooting-007a-wampserver-log_LI

    Buscar ubicación de los logs la instancia de MySQL desde la ínea de comandos

    En el caso de que no pudiera abrirse el log desde WampServer, una opción es abrirlos directamente con el programa que más les guste (ej: vim).

    Para saber donde está siendo guardado basta con buscar el valor de la variable log_error de la instancia de MySQL. Para ello:

    1. Abrir CMD como Administrator (Línea de comando como Administrador)
    2. Ir a la ruta donde está el ejecutable mysql.exe. Usualmente UBICACION_INSTALACIO_WAMPSERVER\bin\mysql\mysqlNUMERO_VERSION\bin.

      Por ejemplo: C:\wamp64\bin\mysql\mysql5.7.31\bin

    3. Ejecutar:

      mysql -uroot -se "SHOW VARIABLES" | findstr /i log | findstr ////

      Si el usuario root tiene password hay que pasar el parámetro -p, es decir el comando sería:

      mysql -uroot -p -se "SHOW VARIABLES" | findstr /i log | findstr ////

      El comando findstr es similar a grep, permitiendo filtrar ciertas expresiones.

    4. Buscar la línea de la variable log_error. A su lado estará la ubicación del archivo de log.

    troubleshooting-007b-search-log-path

    Respondido por modri en #22

  • Estás seguro que el servicio de MySQL está corriendo ?

    Probá esto desde el prompt (inicio > ejecutar > cmd -- no recuerdo si tenés que poner botón derecho y ejecutar como administrador): 

     netstat -a -b

    Y fijate si ves algo en el 3306

  • "... ya que el equipo de destino denegó expresamente dicha conexión..."

    Por casualidad cambiaste los permisos de mysql? 

  • Hola!!

    Estaba verificando a ver si el estaba ejecutando el servicio wampmysqld64 pero no estaba en ejecución y al hacerle click derecho e iniciarlo, me aparece una ventana que dice "El servicio wampmysqld64 en Equipo local se inicio y después de detuvo" y no me lo ejecuta, no se si sepan como arreglar este problema

    gracias!!

Accede o Regístrate para comentar.