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?

Temnovit
fuente
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 .

Guido Vaccarella
fuente
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.

periket2000
fuente
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

Ondrej
fuente
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.

Eric Fossum
fuente
0

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

Alex Balcome
fuente
-1

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

bml13
fuente
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