El puerto 3306 parece estar cerrado en mi servidor Ubuntu

33

Tengo dos servidores VPS , y ambos tienen instalado MySQL , uno para pruebas y otro para desarrollo. Uno de mis servidores no me deja conectar desde afuera. Con el usuario;

'mytestuser' @ '%'

Según un buscador de puertos abierto , el puerto 3306 para el servidor infractor parece estar cerrado. Tengo mis propios programas C ++ y Java escuchando en puertos arbitrarios sin ningún problema. ¿Por qué sucede esto y cómo puedo solucionarlo?

Ubuntu instalado es Ubuntu 11.10 (GNU / Linux 2.6.32-042stab072.10 x86_64)

Resultados de netstat -tupleen cada servidor

Servidor infractor

tcp        0      0 localhost.lo:submission *:*                     LISTEN      root       39967664    -

Servidor de trabajo

tcp        0      0 *:mysql                 *:*                     LISTEN      mysql      1847519288  -
Andy
fuente

Respuestas:

76

El problema era que el servidor solo escuchaba internamente.

Eliminar la línea bind-address 127.0.0.1de /etc/mysql/my.cnfsolucionó el problema.

Las versiones más recientes de Ubuntu (≥16.04) pueden tener esta línea /etc/mysql/mysql.conf.d/mysqld.cnf.

Andy
fuente
2
Esto funcionó para mí. Tenga en cuenta que el nombre de archivo correcto es /etc/mysql/my.cnf, no /etc/mysql/my.conf.
Larry Battle
Cambié mi dirección de enlace para que coincida con la dirección IP externa del servidor y eso funcionó para mí.
Buttle Butkus
Elimine la línea completamente y el servidor escuchará TODAS las interfaces
s1mmel
Me salvaste el día, estuve tratando de resolver este problema durante un par de semanas, ¡gracias!
budiantoip
9

Mi sugerencia, si está seguro de que los puertos están cerrados (me parece extraño que un VPS tenga ese puerto cerrado) es cambiar el archivo de configuración de MySQL para usar otro.

Simplemente abra el archivo de configuración en el terminal sudo nano /etc/mysql/mysql.conf, y busque la [mysqld]sección. En él, busca la línea que dice port = 3306. Cámbielo a otro puerto no utilizado y guarde el archivo.

Luego, simplemente reinicie el VPS o reinicie el servicio, como sudo service mysql restart.

Solo para tener en cuenta que, si el archivo mysql.confno está en el que mencioné anteriormente, puede estar en estos otros lugares:

/etc/my.conf
/etc/my.cnf
/etc/mysql/my.conf

Y si el servicecomando no funciona, haga esto:

sudo /etc/init.d/mysql restart

Si el problema persiste, en mi caso verificaría iptables (en realidad eliminaría todo en iptables solo para comenzar de nuevo si esta podría ser una opción) o cualquier otra opción habilitada para firewall.

Como son VPS, también verificaría el Panel de control de VPS para ver si tiene alguna opción que pueda bloquear los puertos.

Aparte de eso, correría nmapen el VPS para ver qué puertos ha abierto. Debe ejecutarlo desde fuera del VPS para ver qué puertos han abierto.

netstat -tuplen También es una buena idea ver qué puertos abiertos tiene en el servidor y cuáles están en modo ESCUCHAR.

Luis Alvarado
fuente
Oye, lo probé en otro puerto y todavía no funciona bien, también probé 'iptables -A INPUT -i eth0 -p tcp -m tcp --dport PORT -j ACCEPT' pero no tuve suerte :( .. edit im not o eth0 .. todavía podría tener esperanza.
Andy
@Andy Respuesta actualizada para incluir algunas sugerencias más.
Luis Alvarado
Gracias por las sugerencias, Luis, investigaré esto.
Andy
He actualizado los resultados de netstat -tuple a la pregunta. Parece que hay un problema aquí.
Andy
6

Lo arreglé cambiando bind-address 127.0.0.1a bind-address 0.0.0.0in /etc/mysql/mysql.conf.d(para que MySQL escuche en todos los puertos).

Además, configuré una cuenta de usuario mysql para usarla de forma remota (consulte https://stackoverflow.com/a/24171107/132374 ).

Jon Onstott
fuente
6

Yo uso este método:

sudo ufw status
sudo ufw allow XXXX/tcp
# use a port other than the default/predictable 3306
# work outside, and close the door when you are done
sudo ufw deny XXXX/tcp

No es necesario cambiar otros archivos de configuración, y no se abren puertos adicionales de forma predeterminada.

ftcosta
fuente
sudo ufw allow 3306/tcpTraté de editar pero no me lo permitía
Adam
1

Puede suceder que su configuración esté en el directorio /etc/mysql/mysql.conf.d/mysqld.cnf, verifique si ese no es el caso.

invierno
fuente
1
Intenté resolverlo durante unas tres horas antes de ver esto, ¡gracias!
Oliver Ni