Come testare su quale porta MySQL è in esecuzione e se può essere collegato?


143

Ho installato MySQL e ho anche effettuato l'accesso come utente.

Ma quando provo a connettermi in questo modo:

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

Né funziona. Non sono sicuro che entrambi dovrebbero funzionare, ma almeno uno dovrebbe :)

Come posso assicurarmi che la porta sia effettivamente 3306? Esiste un comando linux per vederlo in qualche modo? Inoltre, esiste un modo più corretto per provarlo tramite un URL?

Risposte:


207

Per trovare un ascoltatore su una porta, procedere come segue:

netstat -tln

Dovresti vedere una linea simile a questa se mysql sta davvero ascoltando su quella porta.

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

La porta 3306 è la porta predefinita di MySql.

Per connetterti, devi solo usare qualunque client tu richieda, come il client mysql di base.

mysql -h localhost -u database utente

O un URL interpretato dal codice della tua libreria.


2
Cosa significa quando invece di 127.0.0.1:3306 dice 0.0.0.0:3306?
mbmast,

1
@mbmast the 127 ... significa ascoltare solo sull'host locale (non accessibile dall'esterno). 0.0.0.0 significa "tutte le interfacce", e quindi è (di solito) visibile esternamente.
Keith,

Ho pensato che fosse visibile esternamente, doveva essere l'indirizzo IP della macchina e che 0.0.0.0 significa che il servizio non è disponibile da nessuna parte. Ho sbagliato? Ho una scatola con MySQL, il firewall ha 3306 aperto da qualsiasi indirizzo IP ma MySQL sta rifiutando la connessione, ho pensato perché attualmente MySQL è in ascolto su 0.0.0.0.
mbmast,

Dovrebbe fonderlo con la risposta di @ bortunac, che fa riferimento al -pparametro. L'aggiunta dei processi aiuta davvero a rendere queste informazioni più utili.
Ragaar,

1
@JBeck tre flag, per Linux. TCP, ascoltatori, nessuna ricerca del nome. vedi man netstat.
Keith il

138

Utilizzando il client Mysql:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

ERRORE 1146 (42S02): la tabella 'performance_schema.global_variables' non esiste
Maria Ines Parnisari,

65

grep port /etc/mysql/my.cnf (almeno nelle opere debian / ubuntu)

o

netstat -tlpn | grep mysql

verificare

bind-address 127.0.0.1

in /etc/mysql/my.cnf per vedere possibili restrizioni


32
netstat -tlpn

Mostrerà l'elenco come di seguito:

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

Usa come root per tutti i dettagli. L' -topzione limita l'output alle connessioni TCP, -lper le porte in ascolto, -pelenca il nome del programma e -nmostra la versione numerica della porta anziché una versione denominata.

In questo modo è possibile visualizzare il nome del processo e la porta.


1
Non ha funzionato per me - Ho ottenuto "tcp 0 0 127.0.0.1:3306 0.0.0.0:* ASCOLTA -"
Bryan,

7

Prova a utilizzare solo l' opzione -e( --execute):

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

Sostituisci rootcon il tuo "nome utente" e "password"


6

Entrambi gli URL non sono corretti - dovrebbero esserlo

jdbc:mysql://host:port/database

Pensavo fosse ovvio, ma la connessione a un database con Java richiede un driver JDBC. Avrai bisogno del driver MySQL JDBC .

Forse puoi connetterti usando un socket su TCP / IP. Dai un'occhiata ai documenti di MySQL .

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

AGGIORNARE:

Ho provato a telnet in MySQL ( telnet ip 3306), ma non funziona:

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

Penso che questo sia ciò che avevi in ​​mente.


Sembrava non funzionare quando l'ho provato nel mio codice :( Anche quando l'ho incollato in un browser, Firefox ha detto che non è possibile aprire una cosa del genere. Dove / come ho potuto provarlo? - Grazie!
GeekedOut

Sì, non puoi aprirlo in un browser. Sono necessari il driver MySQL JDBC e il codice Java.
duffymo,

3
questo è solo se stai usando Java.
Keith,

Sto provando a configurarlo usando Ruby on Rails tramite il file database.yml. Ma avevo davvero bisogno del numero di porta.
Geeked:

Questo non risponde davvero alla domanda.
AStopher

6

Un approccio più semplice per alcuni: se vuoi solo verificare se MySQL si trova su una determinata porta, puoi usare il seguente comando nel terminale. Testato su Mac. 3306 è la porta predefinita.

mysql --host=127.0.0.1 --port=3306

Se accedi correttamente al terminale shell di MySQL, sei a posto! Questo è l'output che ottengo con un accesso riuscito.

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>

5

3306 è la porta predefinita per mysql. Controllalo con:

netstat -nl|grep 3306

dovrebbe dare questo risultato:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* ASCOLTA



3

Per me, la risposta di @ joseluisq ha prodotto:

ERRORE 1045 (28000): Accesso negato per l'utente 'root' @ 'localhost' (usando la password: NO)

Ma ha funzionato in questo modo:

$ mysql -u root@localhost  -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+

3

Su un Mac OS X, ci sono due opzioni. netstatolsof

L'uso di netstatnon mostrerà il processo su Mac OS X. quindi usando netstat puoi cercare solo per porta.
L'utilizzo lsofmostrerà il nome del processo.

Ho fatto quanto segue mentre incontravo conflitti portuali (contenitori docker):

netstat -aln | grep 3306

Uscite: tcp46 0 0 *.3306 *.* LISTEN

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

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


2

Se sei su un sistema in cui netstatnon è disponibile (es. RHEL 7 e versioni Debian più recenti) puoi usare ss, come di seguito:

sudo ss -tlpn | grep mysql

E otterrai qualcosa di simile al seguente per l'output:

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

La quarta colonna è Local Address:Port. Quindi in questo caso Mysql è in ascolto sulla porta 3306, l'impostazione predefinita.


1

Sono d'accordo con la soluzione di @ bortunac. my.conf è specifico di mysql mentre netstat ti fornirà tutte le porte di ascolto.

Forse usa entrambi, uno per confermare quale porta è impostata per mysql e l'altra per verificare che il sistema stia ascoltando attraverso quella porta.

Il mio client usa CentOS 6.6 e ho trovato il file my.conf in / etc /, quindi ho usato:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.