¿Cómo probar en qué puerto se ejecuta MySQL y si se puede conectar?

143

He instalado MySQL e incluso he iniciado sesión allí como usuario.

Pero cuando trato de conectarme así:

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

Ninguno de los dos funciona. 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 sea 3306? ¿Hay un comando de Linux para verlo de alguna manera? Además, ¿hay una forma más correcta de probarlo a través de una URL?

GeekedOut
fuente

Respuestas:

207

Para encontrar un oyente en un puerto, haga esto:

netstat -tln

Debería ver una línea como esta si mysql realmente está 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 mysql.

mysql -h localhost -u base de datos de usuarios

O una url que es interpretada por su código de biblioteca.

Keith
fuente
2
¿Qué significa cuando en lugar 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). 0.0.0.0 significa "todas las interfaces" y, por lo tanto, es (generalmente) visible desde el exterior.
Keith
Pensé que era visible externamente, tenía que ser la dirección IP de la máquina y que 0.0.0.0 significa que el servicio no está disponible desde ningún lugar. ¿Me equivoco? Tengo una caja que ejecuta MySQL, el firewall tiene 3306 abiertos desde cualquier dirección IP pero MySQL rechaza la conexión, pensé porque actualmente MySQL está escuchando en 0.0.0.0.
mbmast
Debería fusionar esto con la respuesta de @ bortunac, que hace referencia al -pparámetro. Agregar los procesos realmente ayuda a que esta información sea más útil.
Ragaar
1
@JBeck tres banderas, para Linux. TCP, oyentes, sin búsqueda de nombre. ver man netstat.
Keith
138

Usando el cliente Mysql:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
enagra
fuente
ERROR 1146 (42S02): La tabla 'performance_schema.global_variables' no existe
Maria Ines Parnisari
65

grep port /etc/mysql/my.cnf (al menos en debian / ubuntu funciona)

o

netstat -tlpn | grep mysql

verificar

dirección de enlace 127.0.0.1

en /etc/mysql/my.cnf para ver posibles restricciones

bortunac
fuente
32
netstat -tlpn

Mostrará la lista algo así como 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

Úselo como raíz para todos los detalles. La -topción limita la salida a las conexiones TCP, -lpara puertos de escucha, -penumera el nombre del programa y -nmuestra 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.

mPrinC
fuente
1
No funcionó para mí - Obtuve "tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -"
Bryan
7

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  |
+---------------+-------+

Reemplace rootpor su "nombre de usuario" y "contraseña"

joseluisq
fuente
6

Ambas URL son incorrectas - deberían ser

jdbc:mysql://host:port/database

Pensé que era evidente, pero conectarse a una base de datos con Java requiere un controlador JDBC. Necesitará el controlador MySQL JDBC .

Tal vez pueda conectarse usando un socket a través de TCP / IP. Mira los documentos de MySQL .

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

ACTUALIZAR:

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

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

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

duffymo
fuente
No parecía funcionar cuando lo probé en mi código :( También cuando lo pegué en un navegador, Firefox dijo que no podía abrir tal cosa. ¿Dónde / cómo podría probarlo? - ¡Gracias!
GeekedOut
Sí, no puedes abrirlo en un navegador. Necesita el controlador MySQL JDBC y el código Java.
duffymo
3
eso solo si estás utilizando Java.
Keith
Estoy tratando de configurarlo usando Ruby on Rails a través del archivo database.yml. Pero solo necesitaba el número de puerto realmente.
GeekedOut
Esto realmente no responde la pregunta.
AStopher
6

Un enfoque más simple para algunos: si solo desea verificar si MySQL está en un puerto determinado, puede usar 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 el terminal shell de MySQL, ¡está bien! Este es el resultado que obtengo en 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>
Monarca Wadia
fuente
5

3306 es el puerto predeterminado para mysql. Compruébalo con:

netstat -nl|grep 3306

debería dar este resultado:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* ESCUCHAR

zygimantus
fuente
3

puedes usar

ps -ef | grep mysql
don625
fuente
3

Para mí, la respuesta de @joseluisq arrojó:

ERROR 1045 (28000): acceso denegado para el usuario 'root' @ 'localhost' (usando la contraseña: NO)

Pero funcionó de esta manera:

$ mysql -u root@localhost  -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
José J. Meléndez
fuente
3

En una Mac OS X, hay dos opciones. netstatolsof

Usar netstatno mostrará el proceso en Mac OS X. por lo tanto, usando netstat solo puede buscar por puerto.
El uso lsofmostrará el nombre del proceso.

Hice lo siguiente cuando me encontraba con conflictos de puertos (contenedores de acopladores):

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)

toddcscar
fuente
2

Si está en un sistema donde netstatno está disponible (por ejemplo, RHEL 7 y versiones más recientes de Debian) puede usar ss, como se muestra 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.

nelsonda
fuente
1

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 usa CentOS 6.6 y he encontrado el archivo my.conf en / etc /, así que usé:

grep port /etc/my.conf (CentOS 6.6)

mmmdearte
fuente