2011-05-03 163 views
115

He instalado MySQL e incluso he iniciado sesión allí como usuario.¿Cómo probar qué puerto MySQL se está ejecutando y si se puede conectar?

Pero cuando intento conectar de esta manera:

http://localhost:3306 
mysql://localhost:3306 

Ni las obras. No estoy seguro si se supone que ambos funcionan, pero al menos uno de ellos debería :)

¿Cómo puedo asegurarme de que el puerto es de hecho 3306? ¿Hay algún comando de Linux para verlo de alguna manera? Además, ¿hay una forma más correcta de probarlo a través de una url?

Respuesta

179

Para encontrar un oyente en un puerto, haga lo siguiente:

netstat -tln 

Debería ver una línea que tiene este aspecto si MySQL es, en efecto escuchando en ese puerto.

tcp  0  0 127.0.0.1:3306    0.0.0.0:*     LISTEN  

El puerto 3306 es el puerto predeterminado de MySql.

Para conectarse, solo tiene que usar el cliente que necesite, como el cliente básico de MySQL.

mysql -h localhost -u usuario de la base

O un URL que es interpretado por el código de la biblioteca.

+1

¿Qué significa cuando en vez de 127.0.0.1:3306 dice 0.0.0.0:3306? – mbmast

+1

@mbmast the 127 ... significa escuchar solo en el host local (no accesible externamente). El 0.0.0.0 significa "todas las interfaces", y por lo tanto es (normalmente) visible externamente. – Keith

+0

Pensé que era externamente visible, tenía que ser la dirección IP propia de la máquina y que 0.0.0.0 significa que el servicio no está disponible desde ningún lugar. ¿Tengo eso mal? Tengo una caja que ejecuta MySQL, el firewall tiene 3306 abierto desde cualquier dirección IP pero MySQL rechaza la conexión, pensé porque actualmente MySQL está escuchando en 0.0.0.0. – mbmast

5

Ambas URL son incorrectos - debe ser

jdbc:mysql://host:port/database 

pensé que hacía falta decir, pero la conexión a una base de datos con Java requiere un controlador JDBC. Necesitarás el MySQL JDBC driver.

Tal vez pueda conectarse usando un socket sobre TCP/IP. Consulte el MySQL docs.

Ver http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

ACTUALIZACIÓN:

Traté de telnet en MySQL (telnet ip 3306), pero no funciona:

http://lists.mysql.com/win32/253

Creo que esto es lo que tenía en mente.

+0

¿No hizo parece funcionar cuando tri ed it en mi código :(También cuando pegué en un navegador, Firefox dijo que no puede abrir tal cosa. ¿Dónde/cómo podría probarlo? - ¡Gracias! – GeekedOut

+0

Sí, no puedes abrirlo en un navegador. Necesita el controlador JDBC de MySQL y el código de Java. – duffymo

+3

eso solo si estás usando Java. – Keith

55

grep port /etc/mysql/my.cnf (al menos en Debian/Ubuntu funciona)

o

netstat -tlpn | grep mysql 

verificar

bind-127 dirección: 0.0.1

en/etc/mysql/my.CNF para ver las posibles restricciones

+0

resolvió mi problema –

28
netstat -tlpn 

Se mostrará la lista algo parecido a continuación:

Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  1393/sshd 
tcp  0  0 127.0.0.1:25   0.0.0.0:*    LISTEN  1859/master 
tcp  0  0 123.189.192.64:7654  0.0.0.0:*    LISTEN  2463/monit 
tcp  0  0 127.0.0.1:24135   0.0.0.0:*    LISTEN  21450/memcached 
tcp  0  0 127.0.0.1:3306   0.0.0.0:*    LISTEN  16781/mysqld 

uso como root para todos los detalles. La opción -t limita la salida a las conexiones TCP, -l para los puertos de escucha, -p enumera el nombre del programa y -n muestra la versión numérica del puerto en lugar de una versión con nombre.

De esta manera, puede ver el nombre del proceso y el puerto.

+0

No funcionó para mí - Tengo "tcp 0 0 127.0.0.1:3306 0.0.0.0:* ESCUCHAR -" – Bryan

+1

esto es mucho mejor, ya que muestra el nombre – PaulBGD

+2

No funciona . Pruébalo con sudo. Gracias. –

4

Un enfoque más simple para algunos: si solo quieres comprobar si MySQL está en un puerto determinado, puedes utilizar el siguiente comando en la terminal. Probado en mac. 3306 es el puerto predeterminado.

mysql --host=127.0.0.1 --port=3306

Si inicia sesión con éxito en al terminal de shell de MySQL, ya está bueno! Este es el resultado que obtengo con un inicio de sesión exitoso.

Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 9559 
Server version: 5.6.21 Homebrew 

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> 
110

El uso de cliente de MySQL:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT'; 
+0

ERROR 1146 (42S02): Tabla 'performance_schema.global_variables 'no existe –

0

estoy de acuerdo con la solución de @ bortunac. my.conf es específico de mysql, mientras que netstat le proporcionará todos los puertos de escucha.

Quizás use ambos, uno para confirmar cuál es el puerto configurado para mysql y el otro para verificar que el sistema esté escuchando a través de ese puerto.

Mi cliente utiliza CentOS 6.6 y he encontrado el archivo my.conf en/etc /, por lo que se utiliza:

grep port /etc/my.conf (CentOS 6,6)

4

3306 es el puerto por defecto para MySQL. Comprobarlo con:

netstat -nl|grep 3306 

debe dar a este resultado:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

4

Pruebe solo con la opción -e (--execute):

$ mysql -u root -proot -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"                          (8s 26ms) 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| port   | 3306 | 
+---------------+-------+ 

Reemplazar root por su "nombre de usuario" y "contraseña"

0

Si está en un sistema donde netstat no se encuentra disponible (por ejemplo,RHEL 7 y versiones más recientes de Debian) se puede utilizar ss, como a continuación:

sudo ss -tlpn | grep mysql 

Y obtendrá algo como lo siguiente para la salida:

LISTEN  0  50  *:3306  *:*  users:(("mysqld",pid=5307,fd=14)) 

La cuarta columna es Local Address:Port. Entonces, en este caso, Mysql está escuchando en el puerto 3306, el valor predeterminado.

0

Para mí, la respuesta de @ joseluisq produjo:

ERROR 1045 (28000): Acceso denegado de 'root' @ 'localhost' usuario (usando la contraseña: NO)

pero funcionó de esta manera:

$ mysql -u [email protected] -e "SHOW GLOBAL VARIABLES LIKE 'PORT';" 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| port   | 3306 | 
+---------------+-------+ 
1

En un Mac OS X, hay dos opciones. netstat o lsof

El uso de netstat no mostrará el proceso en Mac OS X. Por lo tanto, si usa netstat, solo puede buscar por puerto.
Al usar lsof se mostrará el nombre del proceso.

hice lo siguiente como yo estaba encontrando conflictos en el puerto (contenedores de Docker):

netstat -aln | grep 3306

Salidas: tcp46 0 0 *.3306 *.* LISTEN

sudo lsof -i -P | grep -i "LISTEN" | grep -i 3306

Salidas: mysqld 60608 _mysql 31u IPv6 0x2ebc4b8d88d9ec6b 0t0 TCP *:3306 (LISTEN)

Cuestiones relacionadas