El host ‘xxx.xx.xxx.xxx’ no puede conectarse a este servidor MySQL

Esto debería ser completamente simple, pero no puedo hacer que funcione por mi vida.
Solo bash conectarme de forma remota a mi servidor MySQL.

conectando como

mysql -u root -h localhost -p 

funciona bien, pero tratando

 mysql -u root -h 'any ip address here' -p 

falla con el error

 ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server 

En la tabla mysql.user , existe exactamente la misma entrada para el usuario ‘root’ con el host ‘localhost’ que otro con el host ‘%’.

Estoy en el extremo de mi ingenio, y no tengo idea de cómo proceder. Cualquier idea es bienvenida.

Posiblemente una precaución de seguridad. Podría intentar agregar una nueva cuenta de administrador:

 mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' -> WITH GRANT OPTION; mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' -> WITH GRANT OPTION; 

Aunque, como Pascal y otros han señalado, no es una gran idea tener un usuario con este tipo de acceso abierto a cualquier IP. Si necesita un usuario administrativo, use root y déjelo en localhost. Para cualquier otra acción, especifique exactamente los privilegios que necesita y limite la accesibilidad del usuario como lo sugiere Pascal a continuación.

Editar:

De las preguntas frecuentes de MySQL:

Si no puede averiguar por qué obtiene acceso denegado, elimine de la tabla de usuario todas las entradas que tengan valores de host que contengan comodines (entradas que contengan caracteres ‘%’ o ‘_’). Un error muy común es insertar una nueva entrada con Host = ‘%’ y User = ‘some_user’, pensando que esto le permite especificar localhost para conectarse desde la misma máquina. La razón por la que esto no funciona es que los privilegios predeterminados incluyen una entrada con Host = ‘localhost’ y User = ”. Debido a que esa entrada tiene un valor de host ‘localhost’ que es más específico que ‘%’, se usa con preferencia a la nueva entrada cuando se conecta desde localhost. El procedimiento correcto es insertar una segunda entrada con Host = ‘localhost’ y User = ‘some_user’, o para eliminar la entrada con Host = ‘localhost’ y User = ”. Después de eliminar la entrada, recuerde emitir una instrucción FLUSH PRIVILEGES para volver a cargar las tablas de permisos. Ver también la Sección 5.4.4, “Control de acceso, Etapa 1: Verificación de conexión”.

Uno tiene que crear un new MySQL User y asignar privilegios como se muestra a continuación en la Query prompt través de phpMyAdmin o el símbolo del sistema:

 CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION; CREATE USER 'username'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; 

Una vez hecho con las cuatro consultas, debe conectarse con username / password

Mi mensaje de error fue similar y dijo que ‘ Host XXX no puede conectarse a este servidor MySQL ‘ aunque estaba usando root. A continuación, le mostramos cómo asegurarse de que la raíz tenga los permisos correctos.

Mi configuración :

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

Solución

  1. Abra el archivo en ‘etc / mysql / my.cnf’
  2. Comprobar:

    • puerto (por defecto esto es ‘port = 3306’)
    • bind-address (de forma predeterminada, esto es ‘bind-address = 127.0.0.1’; si desea abrir todos, simplemente haga un comentario en esta línea. Para mi ejemplo, diré que el servidor real está en 10.1.1.7)
  3. Ahora acceda a la base de datos MySQL en su servidor real (digamos que su dirección remota es 123.123.123.123 en el puerto 3306 como usuario ‘root’ y quiero cambiar los permisos en la base de datos ‘dataentry’. Recuerde cambiar la dirección IP, el puerto y el nombre de la base de datos a su configuración)

     mysql -u root -p Enter password:  mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password'; mysql>FLUSH PRIVILEGES; mysql>exit 
  4. sudo service mysqld restart

  5. Ahora debería poder conectarse de forma remota a su base de datos. Por ejemplo, estoy usando MySQL Workbench y poniendo ‘Hostname: 10.1.1.7’, ‘Port: 3306’, ‘Username: root’

Debe otorgar acceso al usuario desde cualquier nombre de host.

Así es como agrega un nuevo privilegio de phpmyadmin

Goto Privileges> Agregar un nuevo usuario

enter image description here

Seleccione cualquier host para el nombre de usuario deseado

enter image description here

Simplemente realice los siguientes pasos:

1) Conéctese a mysql

 mysql -uroot -p 

2) Crear usuario

 CREATE USER 'user'@'%' IDENTIFIED BY 'password'; 

3) otorgar permisos

  GRANT ALL PRIVILEGES ON \*.\* TO 'user'@'%' WITH GRANT OPTION; 

4) Flush priviledges

 FLUSH PRIVILEGES; 

El mensaje *Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server es una respuesta del servidor MySQL al cliente MySQL. Observe cómo devuelve la dirección IP y no el nombre de host.

Si está intentando conectarse con mysql -h -u -p y devuelve este mensaje con la dirección IP, entonces el servidor MySQL no puede realizar una búsqueda inversa en el cliente. Esto es crítico porque así es como se asigna el cliente MySQL a las concesiones.

Asegúrese de que puede hacer un nslookup FROM el servidor MySQL. Si eso no funciona, entonces no hay entrada en el servidor DNS. Alternativamente, puede poner una entrada en el archivo HOSTS del servidor MySQL ( < <- El orden aquí podría importar).

Una entrada en el archivo host de mi servidor que permite una búsqueda inversa del cliente MySQL solucionó este problema.

Si modifica las tablas de concesión manualmente (utilizando INSERTAR, ACTUALIZAR, etc.), debe ejecutar una instrucción FLUSH PRIVILEGES para indicarle al servidor que vuelva a cargar las tablas de concesión.

PD: No recomendaría permitir que ningún host se conecte con ningún usuario (especialmente no con el uso de la root ). Si está utilizando mysql para una aplicación cliente / servidor, prefiera una dirección de subred. Si está utilizando mysql con un servidor web o servidor de aplicaciones, use direcciones IP específicas.

Una forma simple es iniciar sesión en phpmyadmin con la cuenta raíz, ir a la base de datos mysql y seleccionar la tabla de usuario, editar la cuenta raíz y en el campo host agregar% wild card. y luego a través de privilegios de ssh flush

  FLUSH PRIVILEGES; 

Simplemente use la interfaz provista por la herramienta GUI de MySql (SQLyog):

Haga clic en Administrador de usuarios: enter image description here

Ahora, si desea otorgar acceso PARA CUALQUIER OTRA PC REMOTA, solo asegúrese de que, al igual que en la imagen de abajo, el valor del campo Host sea% (que es el comodín)

enter image description here

Si esta es una instalación reciente de MySQL, entonces antes de cambiar cualquier otra cosa, intente simplemente ejecutar este comando y luego intente de nuevo:

 flush privileges; 

Esto solo soluciona el problema para mí en Ubuntu 16.04, mysql 5.7.20. YMMV.

Bueno, lo que puedes hacer es abrir el archivo mysql.cfg y debes cambiar la dirección de enlace a este

bind-address = 127.0.0.1

y luego reinicia mysql y podrás conectar ese servidor a esto.

Mira esto, puedes tener una idea de eso.

esto es sol real

Si se está ejecutando en Windows; Una solución simple es ejecutar el asistente de configuración de la instancia del servidor MySQL. Está en tu grupo MYSQL en el menú de inicio. En la segunda pantalla, haga clic en el cuadro que dice “permitir el acceso raíz desde máquinas remotas”.

La mayoría de las respuestas aquí muestran cómo crear usuarios con dos valores de host: uno para localhost y otro para % .

Tenga en cuenta que a excepción de un usuario localhost integrado como root, no necesita hacer esto. Si simplemente desea crear un nuevo usuario que pueda iniciar sesión desde cualquier lugar, puede usar

 CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword'; GRANT  ON  TO myuser; 

y funcionará bien. (Como otros han mencionado, es una idea terrible otorgar privilegios administrativos a un usuario desde cualquier dominio).

Solo encuentra una forma mejor de hacerlo desde tu panel de control de hosting (estoy usando DirectAdmin aquí)

simplemente vaya a la base de datos del servidor de destino en su panel de control, en mi caso: administración de MySQL -> seleccione su base de datos -> encontrará: “Hosts de acceso”, simplemente agregue su host remoto aquí y ¡está trabajando ahora! enter image description here

Supongo que hay una opción similar en otros C.panels como plesk, etc.

Espero que haya sido útil para ti también.

Yo también estaba enfrentando el mismo problema. Lo resolví en 2 minutos para mí. Acabo de incluir una lista blanca por CP.

Supongamos que está intentando conectar la base de datos del servidor B desde el servidor A. Vaya al Panel B del servidor B-> MySQL remoto-> ingrese la dirección IP del servidor A y eso es todo.

Problema: root @ localhost no puede conectarse a una nueva instalación de mysql-community-server en openSUSE 42.2-1.150.x86_64. Mysql rechaza las conexiones – punto.

Solución:

 $ ls -l /var/lib/mysql/mysql/user.* -rw-rw---- 1 mysql mysql 0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD -rw-rw---- 1 mysql mysql 1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI -rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm 

El archivo user.MYD tiene 0 tamaño (¿en serio?). Copié los 3 archivos de otro sistema en funcionamiento.

 $ /usr/sbin/rcmysql stop $ cd /var/lib/mysql/mysql/ $ scp root@othersytem:/var/lib/mysql/mysql/user.* ./ $ /usr/sbin/rcmysql start $ cd - $ mysql -u root -p 

Pude iniciar sesión. Luego, solo se trató de volver a aplicar todos los privilegios de esquema. Además, si deshabilitó IPv6, vuelva a habilitarlo temporalmente para que la cuenta root @ :: 1 también funcione.

Esta respuesta podría ayudar a alguien …

Todas estas respuestas no ayudaron, entonces me di cuenta de que había olvidado revisar una cosa crucial … El puerto 🙂

Tengo mysql ejecutándose en un contenedor acoplable que se ejecuta en un puerto diferente. Estaba apuntando a mi máquina host en el puerto 3306, que tengo un servidor mysql ejecutándose. Mi contenedor expone el servidor en el puerto 33060. ¡Así que todo este tiempo, estaba buscando el servidor equivocado! doh!

En caso de que alguien que enfrenta este problema lo experimente desde SQLyog, esto sucedió:

Me había conectado a la base de datos remota (desde SQLyog) y trabajé durante algunas horas. Luego dejé el sistema por algunos minutos, luego volví para continuar con mi trabajo: ¡ ERROR 1130 ! Nada de lo que intenté funcionó; Reiniciar SQLyog no lo solucionó. Luego reinicié el sistema, todavía no funcionaba.

Así que traté de conectarme desde la terminal, funcionó. Luego lo reintenté en SQLyog … y funcionó. No puedo explicarlo más que ‘rareza aleatoria en la computadora’, pero creo que podría ayudar a alguien.

si intentas ejecutar la consulta mysql sin definir una conexión de cadena, obtendrás este error.

Probablemente olvide forzar la cadena de conexión antes de la ejecución. ¿has verificado esto? (perdón por el mal inglés)

Todas las respuestas aquí no funcionaron en mi caso, por lo que puedo considerar que esto puede ayudar a otros usuarios en el futuro. Esto también puede ser un problema en nuestro código, no solo en MySQL solo.

Si está usando VB.NET

En lugar de este código:

  Dim server As String = My.Settings.DB_Server Dim username As String = My.Settings.DB_Username Dim password As String = My.Settings.DB_Password Dim database As String = My.Settings.DB_Database MysqlConn.ConnectionString = "server=" & server & ";" _ & "user id=" & username & ";" _ & "password=" & password & ";" _ & "database=" & database MysqlConn = New MySqlConnection() 

Necesita mover MysqlConn = New MySqlConnection() en la primera línea. Entonces sería así

  MysqlConn = New MySqlConnection() Dim server As String = My.Settings.DB_Server Dim username As String = My.Settings.DB_Username Dim password As String = My.Settings.DB_Password Dim database As String = My.Settings.DB_Database MysqlConn.ConnectionString = "server=" & server & ";" _ & "user id=" & username & ";" _ & "password=" & password & ";" _ & "database=" & database