Jak sprawdzić, na którym porcie działa MySQL i czy można go podłączyć?

143

Zainstalowałem MySQL i nawet zalogowałem się tam jako użytkownik.

Ale kiedy próbuję połączyć się w ten sposób:

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

Ani jedno, ani drugie nie działa. Nie jestem pewien, czy oba mają działać, ale przynajmniej jeden z nich powinien :)

Jak mogę się upewnić, że port to rzeczywiście 3306? Czy jest jakieś polecenie Linuksa, aby to jakoś zobaczyć? Czy istnieje bardziej poprawny sposób wypróbowania tego za pomocą adresu URL?

GeekedOut
źródło

Odpowiedzi:

207

Aby znaleźć nasłuchiwanie na porcie, wykonaj następujące czynności:

netstat -tln

Powinieneś zobaczyć linię, która wygląda tak, jeśli mysql rzeczywiście nasłuchuje na tym porcie.

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

Port 3306 jest domyślnym portem MySql.

Aby się połączyć, wystarczy użyć dowolnego klienta, którego potrzebujesz, na przykład podstawowego klienta mysql.

mysql -h localhost -u baza danych użytkowników

Lub adres URL, który jest interpretowany przez kod Twojej biblioteki.

Keith
źródło
2
Co to znaczy, gdy zamiast 127.0.0.1:3306 jest napisane 0.0.0.0:3306?
mbmast
1
@mbmast the 127 ... oznacza nasłuchiwanie tylko na hoście lokalnym (niedostępne z zewnątrz). 0.0.0.0 oznacza „wszystkie interfejsy” i dlatego jest (zwykle) widoczna z zewnątrz.
Keith,
Wydawało mi się, że jest to widoczne z zewnątrz, musiał to być własny adres IP maszyny, a 0.0.0.0 oznacza, że ​​usługa nie jest dostępna z dowolnego miejsca. Czy to źle? Mam skrzynkę z MySQL, zapora ogniowa ma 3306 otwartą z dowolnego adresu IP, ale MySQL odmawia połączenia, pomyślałem, ponieważ obecnie MySQL nasłuchuje na 0.0.0.0.
mbmast
Powinien połączyć to z odpowiedzią @ bortunac, która odwołuje się do -pparametru. Dodanie procesu (-ów) naprawdę pomaga zwiększyć użyteczność tych informacji.
Ragaar
1
@JBeck trzy flagi dla systemu Linux. TCP, słuchacze, brak wyszukiwania nazw. zobacz man netstat.
Keith,
138

Korzystanie z klienta MySQL:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
enagra
źródło
BŁĄD 1146 (42S02): Tabela 'performance_schema.global_variables' nie istnieje
Maria Ines Parnisari
65

grep port /etc/mysql/my.cnf (przynajmniej w debianie / ubuntu)

lub

netstat -tlpn | grep mysql

zweryfikować

adres wiązania 127.0.0.1

w /etc/mysql/my.cnf, aby zobaczyć możliwe ograniczenia

bortunac
źródło
32
netstat -tlpn

Wyświetli listę mniej więcej tak:

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

Użyj jako root dla wszystkich szczegółów. -tOpcja ogranicza wyjście do połączeń TCP, -ldo słuchania porty, -pzawiera nazwę programu i -npokazuje wersję numeryczną portu zamiast wersji nazwie.

W ten sposób możesz zobaczyć nazwę procesu i port.

mPrinC
źródło
1
Nie działa dla mnie - otrzymałem „tcp 0 0 127.0.0.1:3306 0.0.0.0:* SŁUCHAJ -”
Bryan
7

Spróbuj użyć tylko opcji -e( --execute):

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

Zastąp rootswoją „nazwą użytkownika” i „hasłem”

joseluisq
źródło
6

Oba adresy URL są nieprawidłowe - powinno być

jdbc:mysql://host:port/database

Myślałem, że to oczywiste, ale połączenie się z bazą danych za pomocą Java wymaga sterownika JDBC. Będziesz potrzebował sterownika MySQL JDBC .

Może możesz połączyć się za pomocą gniazda przez TCP / IP. Sprawdź dokumentację MySQL .

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

AKTUALIZACJA:

Próbowałem połączyć się telnetem z MySQL ( telnet ip 3306), ale to nie działa:

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

Myślę, że właśnie to miałeś na myśli.

duffymo
źródło
Wydawało się, że nie działa, gdy wypróbowałem to w swoim kodzie :( Również kiedy wkleiłem go do przeglądarki, Firefox powiedział, że nie może tego otworzyć. Gdzie / jak mogę to wypróbować? - Dziękuję!
GeekedOut
Tak, nie możesz go otworzyć w przeglądarce. Potrzebujesz sterownika MySQL JDBC i kodu Java.
duffymo
3
dzieje się tak tylko wtedy, gdy używasz Javy.
Keith
Próbuję ustawić go za pomocą Ruby on Rails za pośrednictwem pliku database.yml. Ale naprawdę potrzebowałem tylko numeru portu.
GeekedOut
To naprawdę nie odpowiada na pytanie.
AStopher
6

Prostsze podejście dla niektórych: jeśli chcesz tylko sprawdzić, czy MySQL jest na określonym porcie, możesz użyć następującego polecenia w terminalu. Przetestowano na mac. 3306 to port domyślny.

mysql --host=127.0.0.1 --port=3306

Jeśli pomyślnie zalogujesz się do terminalu powłoki MySQL, wszystko jest w porządku! To jest wynik, który otrzymuję po pomyślnym zalogowaniu.

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
źródło
5

3306 to domyślny port dla mysql. Sprawdź to na:

netstat -nl|grep 3306

powinien dać taki wynik:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* SŁUCHAJ

zygimantus
źródło
3

możesz użyć

ps -ef | grep mysql
don625
źródło
3

Dla mnie odpowiedź @ joseluisq dała:

BŁĄD 1045 (28000): Odmowa dostępu dla użytkownika „root” @ „localhost” (przy użyciu hasła: NIE)

Ale to działało w ten sposób:

$ mysql -u root@localhost  -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
Jose J Melendez
źródło
3

W systemie Mac OS X są dwie opcje. netstatlublsof

Użycie netstatnie pokaże procesu na Mac OS X. więc używając netstat możesz wyszukiwać tylko według portu.
Za pomocąlsof pokaże nazwę procesu.

Wykonałem następujące czynności, ponieważ napotykałem konflikty portów (kontenery docker):

netstat -aln | grep 3306

Wyjścia: tcp46 0 0 *.3306 *.* LISTEN

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

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

toddcscar
źródło
2

Jeśli jesteś w systemie, w którym netstatnie jest dostępny (np. RHEL 7 i nowsze wydania Debiana), możesz użyć ss, jak poniżej:

sudo ss -tlpn | grep mysql

Otrzymasz coś takiego do wyjścia:

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

Czwarta kolumna to Local Address:Port. W tym przypadku Mysql nasłuchuje na porcie 3306, domyślnym.

nelsonda
źródło
1

Zgadzam się z rozwiązaniem @ bortunac. my.conf jest specyficzny dla mysql, podczas gdy netstat dostarczy Ci wszystkie porty nasłuchujące.

Być może użyj obu, jednego do sprawdzenia, który port jest ustawiony dla mysql, a drugiego do sprawdzenia, czy system nasłuchuje przez ten port.

Mój klient używa CentOS 6.6 i znalazłem plik my.conf w / etc /, więc użyłem:

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

mmmdearte
źródło