MySQL se niega a aceptar conexiones remotas


13

Acabo de instalar un nuevo servidor ubuntu con mysql (percona 5.5), pero se niega a aceptar conexiones de hosts remotos

Esto es lo que sucede si intento conectarme a este servidor de forma remota:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

Cuando verifiqué si mysql escucha conexiones remotas, vi esto:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

Como puede ver, dice 127.0.0.1:3306que significa "Acepto solo conexiones locales".

Verifiqué mis variables skip_networkingy bind-address- todo está apagado:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

Tengo otro servidor con absolutamente la misma configuración y funciona muy bien:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

¿Cuál puede ser la razón de esto? ¿Cómo hago que mysql responda a conexiones remotas?


Tenga en cuenta que la variable bind_addresssolo está disponible desde la versión 5.6 ( bugs.mysql.com/bug.php?id=44355 ), por lo que devolverá un conjunto vacío en v5.5 incluso si está configurado.
falso el

Muéstranos tu configuración de my.cnf.
user9517

¿Ha verificado problemas fuera de mySQL, como un firewall o un problema de enrutamiento?
Stese

Respuestas:


20

Intenta agregar bind-address = 0.0.0.0a tu [mysqld]sección de tu my.cnfy reiniciar mysqld .


2
El archivo está en/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo

La mía estaba en /etc/my.cnf.d/bind-addr.cnf
joseph el

0

Podría deberse a la tabla de usuario de la base de datos mysql (use mysql; show tables;). Si el enlace a 0.0.0.0 no funciona para usted, intente darle a su usuario el host '%' en lugar de 'localhost' en esa tabla.

Por ejemplo, intente crear un usuario como:

CREAR USUARIO su nombre de usuario @ '%' IDENTIFICADO POR 'su contraseña'

e intente conectarse con ese usuario.


3
La conexión rechazada generalmente significa que nada está escuchando en el puerto IP correspondiente.
user9517

Es cierto que me ha parpadeado "No puedo conectarme al servidor MySQL", no recuerdo en el telnet. Lo siento.
periket2000

"No se puede conectar a MySQL" no se origina en un privilegio que no está disponible para un usuario. Es un par {IP: puerto} que no coincide con un intento de conexión.
Fabien Haddadi

0

Cuando todo lo demás falla y está seguro de que el servidor ESTÁ escuchando en el puerto predeterminado y está intentando conectarse desesperadamente con el cliente mysql desde otro host, intente especificar el puerto en la URL del comando mysql.

Por extraño que sea, tuve que usar la siguiente sintaxis:

mysql -h someHost --port=3306 -u someUser -p someDb

He encontrado esto (¿error?) Totalmente por accidente (después de perder mis pelos :)).

Mi configuración: debian jessie, mysql fresco 5.7.18, usuarios / db creados, dirección de enlace comentada, mysqld reiniciado


Una explicación racional es que el servidor someHost MySQL está realmente escuchando en 3306, como lo demuestra la directiva --port. Pero su binario de cliente mysql proviene de la versión MariaDB ... por lo tanto usa el puerto 3307 como predeterminado, a menos que se especifique lo contrario. Verifique el origen del binario del cliente mysql que está utilizando. Sugerencia: compruebe también la variable de entorno PATH ...
Fabien Haddadi

0

Acabo de tener este problema y mi problema parecía estar relacionado con el firewall. Por cierto, gracias @Temnovit por los comandos de solución de problemas de Mysql.

Usé netstat para decir que el servidor se estaba ejecutando y en el puerto correcto. También podría decir que mi servidor no aceptaba conexiones en ese puerto con un simple comando telnet.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

Después de otra respuesta útil sobre los comandos del firewall de Fedora, podría abrir los puertos correctos.

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

Mi comando telnet fue exitoso.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

Si aún tiene problemas, es probable que sea un problema de permisos de usuario.


0

He mariadbinstalado La soulution era modificar el bind-addressubicado en/etc/mysql/mariadb.conf.d/50-server.cnf


-1

La solución descrita en el siguiente enlace debería resolver su problema http://www.debianhelp.co.uk/remotemysql.htm


2
bml13, citar un enlace en apoyo de su respuesta es una práctica excelente, pero preferimos que las personas escriban la respuesta aquí y agreguen un enlace, no solo poner el enlace y dejarlo así.
MadHatter

1
... especialmente porque ahora es un enlace muerto.
Haz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.