Wie teste ich, auf welchem ​​Port MySQL läuft und ob es verbunden werden kann?

143

Ich habe MySQL installiert und mich dort sogar als Benutzer angemeldet.

Aber wenn ich versuche, mich so zu verbinden:

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

Beides funktioniert nicht. Ich bin mir nicht sicher, ob beide funktionieren sollen, aber mindestens einer von ihnen sollte :)

Wie kann ich sicherstellen, dass der Port tatsächlich 3306 ist? Gibt es einen Linux-Befehl, um es irgendwie zu sehen? Gibt es auch eine korrektere Möglichkeit, es über eine URL zu versuchen?

GeekedOut
quelle

Antworten:

207

Gehen Sie folgendermaßen vor, um einen Listener an einem Port zu finden:

netstat -tln

Sie sollten eine Zeile sehen, die so aussieht, wenn MySQL tatsächlich diesen Port abhört.

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

Port 3306 ist der Standardport von MySQL.

Um eine Verbindung herzustellen, müssen Sie nur den gewünschten Client verwenden, z. B. den grundlegenden MySQL-Client.

mysql -h localhost -u Benutzerdatenbank

Oder eine URL, die von Ihrem Bibliothekscode interpretiert wird.

Keith
quelle
2
Was bedeutet es, wenn anstelle von 127.0.0.1:3306 0.0.0.0:3306 steht?
mbmast
1
@mbmast the 127 ... bedeutet, dass nur der lokale Host abgehört wird (nicht extern zugänglich). Die 0.0.0.0 bedeutet "alle Schnittstellen" und ist daher (normalerweise) von außen sichtbar.
Keith
Ich dachte, von außen sichtbar zu sein, es musste die IP-Adresse des Geräts sein und 0.0.0.0 bedeutet, dass der Dienst von nirgendwo verfügbar ist. Habe ich das falsch Ich habe eine Box mit MySQL, die Firewall hat 3306 von jeder IP-Adresse geöffnet, aber MySQL lehnt die Verbindung ab, dachte ich, weil MySQL derzeit 0.0.0.0 abhört.
mbmast
Sollte dies mit der Antwort von @ bortunac zusammenführen, die auf den -pParameter verweist . Das Hinzufügen der Prozesse hilft wirklich dabei, diese Informationen nützlicher zu machen.
Ragaar
1
@JBeck drei Flags für Linux. TCP, Listener, keine Namenssuche. siehe man netstat.
Keith
138

Verwenden des MySQL-Clients:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
Enagra
quelle
FEHLER 1146 (42S02): Tabelle 'performance_schema.global_variables' existiert nicht
Maria Ines Parnisari
65

grep port /etc/mysql/my.cnf (Zumindest in Debian / Ubuntu-Werken)

oder

netstat -tlpn | grep mysql

überprüfen

Bindungsadresse 127.0.0.1

in /etc/mysql/my.cnf, um mögliche Einschränkungen anzuzeigen

Bortunac
quelle
32
netstat -tlpn

Die Liste wird wie folgt angezeigt:

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

Verwenden Sie als Root für alle Details. Die -tOption beschränkt die Ausgabe auf TCP-Verbindungen -lfür Überwachungsports, -plistet den Programmnamen auf und -nzeigt die numerische Version des Ports anstelle einer benannten Version an.

Auf diese Weise können Sie den Prozessnamen und den Port sehen.

mPrinC
quelle
1
Hat bei mir nicht funktioniert - ich habe "tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -"
Bryan
7

Versuchen Sie es nur mit der Option -e( --execute):

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

Ersetzen Sie rootdurch Ihren "Benutzernamen" und "Passwort"

joseluisq
quelle
6

Beide URLs sind falsch - sollten sein

jdbc:mysql://host:port/database

Ich dachte, es sei selbstverständlich, aber für die Verbindung zu einer Datenbank mit Java ist ein JDBC-Treiber erforderlich. Sie benötigen den MySQL JDBC-Treiber .

Möglicherweise können Sie eine Verbindung über einen Socket über TCP / IP herstellen. Schauen Sie sich die MySQL-Dokumente an .

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

AKTUALISIEREN:

Ich habe versucht, in MySQL ( telnet ip 3306) zu telneten , aber es funktioniert nicht:

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

Ich denke, das haben Sie sich vorgestellt.

Duffymo
quelle
Schien nicht zu funktionieren, als ich es in meinem Code ausprobierte :( Auch als ich es in einen Browser einfügte, sagte Firefox, dass es so etwas nicht öffnen kann. Wo / wie könnte ich es ausprobieren? - Danke!
GeekedOut
Ja, Sie können es nicht in einem Browser öffnen. Sie benötigen den MySQL JDBC-Treiber und Java-Code.
Duffymo
3
Das ist nur möglich, wenn Sie Java verwenden.
Keith
Ich versuche es mit Ruby on Rails über die Datei database.yml einzurichten. Aber ich brauchte nur die Portnummer wirklich.
GeekedOut
Dies beantwortet die Frage nicht wirklich.
AStopher
6

Ein einfacherer Ansatz für einige: Wenn Sie nur überprüfen möchten, ob sich MySQL an einem bestimmten Port befindet, können Sie den folgenden Befehl im Terminal verwenden. Auf Mac getestet. 3306 ist der Standardport.

mysql --host=127.0.0.1 --port=3306

Wenn Sie sich erfolgreich beim MySQL-Shell-Terminal anmelden, sind Sie gut! Dies ist die Ausgabe, die ich bei einer erfolgreichen Anmeldung erhalte.

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>
Monarch Wadia
quelle
5

3306 ist der Standardport für MySQL. Überprüfen Sie es mit:

netstat -nl|grep 3306

es sollte dieses Ergebnis geben:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* HÖREN

Zygimantus
quelle
3

Sie können verwenden

ps -ef | grep mysql
don625
quelle
3

Für mich ergab die Antwort von @ joseluisq:

FEHLER 1045 (28000): Zugriff für Benutzer 'root' @ 'localhost' verweigert (mit Passwort: NO)

Aber es hat so funktioniert:

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

Auf einem Mac OS X gibt es zwei Möglichkeiten. netstatoderlsof

Mit netstatwird der Vorgang unter Mac OS X nicht angezeigt. Mit netstat können Sie also nur nach Port suchen.
Mit lsofwird der Prozessname angezeigt.

Ich habe Folgendes getan, als ich auf Portkonflikte (Docker-Container) gestoßen bin:

netstat -aln | grep 3306

Ausgänge: tcp46 0 0 *.3306 *.* LISTEN

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

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

toddcscar
quelle
2

Wenn Sie sich auf einem System befinden, auf dem netstates nicht verfügbar ist (z. B. RHEL 7 und neuere Debian-Versionen), können Sie ssFolgendes verwenden:

sudo ss -tlpn | grep mysql

Und Sie erhalten ungefähr Folgendes für die Ausgabe:

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

Die vierte Spalte ist Local Address:Port. In diesem Fall überwacht MySQL also Port 3306, die Standardeinstellung.

Nelsonda
quelle
1

Ich stimme der Lösung von @ bortunac zu. my.conf ist mysql-spezifisch, während netstat Ihnen alle Überwachungsports zur Verfügung stellt.

Verwenden Sie möglicherweise beide, um zu bestätigen, welcher Port für MySQL festgelegt ist, und um zu überprüfen, ob das System diesen Port überwacht.

Mein Client verwendet CentOS 6.6 und ich habe die Datei my.conf unter / etc / gefunden. Daher habe ich Folgendes verwendet:

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

mmmdearte
quelle