Bagaimana cara menguji port mana MySQL sedang berjalan dan apakah itu dapat dihubungkan?


143

Saya telah menginstal MySQL dan bahkan masuk sebagai pengguna.

Tetapi ketika saya mencoba terhubung seperti ini:

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

Tidak ada yang berhasil. Tidak yakin apakah keduanya seharusnya berfungsi, tetapi setidaknya salah satu dari mereka seharusnya :)

Bagaimana saya bisa memastikan bahwa port tersebut benar-benar 3306? Apakah ada perintah linux untuk melihatnya? Juga, adakah cara yang lebih benar untuk mencobanya melalui url?

Jawaban:


207

Untuk menemukan pendengar di port, lakukan ini:

netstat -tln

Anda akan melihat garis yang terlihat seperti ini jika mysql memang mendengarkan pada port itu.

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

Port 3306 adalah port default MySql.

Untuk terhubung, Anda hanya perlu menggunakan klien apa pun yang Anda butuhkan, seperti klien mysql dasar.

mysql -h localhost -u basis data pengguna

Atau url yang ditafsirkan oleh kode perpustakaan Anda.


2
Apa artinya bila alih-alih 127.0.0.1:3306 dikatakan 0.0.0.0:3306?
mbmast

1
@mbmast the 127 ... berarti mendengarkan hanya pada host lokal (tidak dapat diakses secara eksternal). 0.0.0.0 berarti "semua antarmuka", dan karenanya (biasanya) terlihat secara eksternal.
Keith

Saya pikir secara eksternal terlihat, itu harus alamat IP mesin itu sendiri dan 0.0.0.0 berarti layanan tidak tersedia dari mana saja. Apakah saya salah? Saya memiliki kotak yang menjalankan MySQL, firewall memiliki 3306 terbuka dari alamat IP tetapi MySQL menolak koneksi, saya pikir karena saat ini MySQL mendengarkan pada 0.0.0.0.
mbmast

Seharusnya menggabungkan ini dengan jawaban @ bortunac, yang mereferensikan -pparameter. Menambahkan proses sangat membantu membuat informasi ini lebih bermanfaat.
Ragaar

1
@JPeriksa tiga bendera, untuk Linux. TCP, pendengar, tidak ada pencarian nama. lihat man netstat.
Keith

138

Menggunakan klien Mysql:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

GALAT 1146 (42S02): Tabel 'performance_schema.global_variables' tidak ada
Maria Ines Parnisari

65

grep port /etc/mysql/my.cnf (setidaknya dalam karya debian / ubuntu)

atau

netstat -tlpn | grep mysql

memeriksa

bind-address 127.0.0.1

di /etc/mysql/my.cnf untuk melihat kemungkinan pembatasan


32
netstat -tlpn

Akan muncul daftar seperti di bawah ini:

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

Gunakan sebagai root untuk semua detail. The -tpilihan membatasi output untuk koneksi TCP, -luntuk mendengarkan port, -pdaftar nama program dan -nmenunjukkan versi numerik dari pelabuhan bukan versi bernama.

Dengan cara ini Anda dapat melihat nama proses dan porta.


1
Tidak bekerja untuk saya - Saya mendapat "tcp 0 0 127.0.0.1:3306 0.0.0.0:* DENGARKAN -"
Bryan

7

Coba saja gunakan opsi -e( --execute):

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

Ganti rootdengan "nama pengguna" dan "kata sandi" Anda


6

Kedua URL salah - seharusnya

jdbc:mysql://host:port/database

Saya pikir itu tidak perlu dikatakan, tetapi menghubungkan ke database dengan Java membutuhkan driver JDBC. Anda memerlukan driver MySQL JDBC .

Mungkin Anda dapat terhubung menggunakan soket melalui TCP / IP. Lihatlah dokumen MySQL .

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

MEMPERBARUI:

Saya mencoba telnet ke MySQL ( telnet ip 3306), tetapi tidak berhasil:

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

Saya pikir ini adalah apa yang ada dalam pikiran Anda.


Sepertinya tidak berfungsi ketika saya mencobanya di kode saya :( Juga ketika saya menempelkannya ke browser, Firefox mengatakan tidak bisa membuka hal seperti itu. Di mana / bagaimana saya bisa mencobanya? - Terima kasih!
GeekedOut

Ya, Anda tidak dapat membukanya di browser. Anda memerlukan driver JDBC MySQL dan kode Java.
duffymo

3
itu hanya jika Anda menggunakan Java.
Keith

Saya mencoba mengaturnya menggunakan Ruby on Rails melalui file database.yml. Tapi saya benar-benar hanya perlu nomor porta.
GeekedOut

Ini tidak benar-benar menjawab pertanyaan.
AStopher

6

Pendekatan yang lebih sederhana untuk beberapa: Jika Anda hanya ingin memeriksa apakah MySQL pada port tertentu, Anda dapat menggunakan perintah berikut di terminal. Diuji pada mac. 3306 adalah port default.

mysql --host=127.0.0.1 --port=3306

Jika Anda berhasil masuk ke terminal shell MySQL, Anda baik-baik saja! Ini adalah output yang saya dapatkan pada login yang sukses.

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 adalah port default untuk mysql. Periksa dengan:

netstat -nl|grep 3306

itu harus memberikan hasil ini:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* DENGARKAN



3

Bagi saya, jawaban @ joseluisq menghasilkan:

GALAT 1045 (28000): Akses ditolak untuk 'root' @ 'localhost' pengguna (menggunakan kata sandi: TIDAK)

Tapi itu bekerja seperti ini:

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

3

Pada mac os X, ada dua opsi. netstatataulsof

Menggunakan netstattidak akan menunjukkan proses pada Mac OS X. jadi dengan menggunakan netstat Anda hanya dapat mencari berdasarkan port.
Menggunakan lsofakan menampilkan nama proses.

Saya melakukan hal berikut ketika saya menghadapi konflik pelabuhan (kontainer buruh pelabuhan):

netstat -aln | grep 3306

Output: tcp46 0 0 *.3306 *.* LISTEN

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

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


2

Jika Anda berada di sistem netstatyang tidak tersedia (mis. RHEL 7 dan rilis Debian yang lebih baru), Anda dapat menggunakan ss, seperti di bawah ini:

sudo ss -tlpn | grep mysql

Dan Anda akan mendapatkan sesuatu seperti berikut untuk hasil:

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

Kolom keempat adalah Local Address:Port. Jadi dalam hal ini Mysql mendengarkan pada port 3306, defaultnya.


1

Saya setuju dengan solusi @ bortunac. my.conf adalah mysql khusus sementara netstat akan memberi Anda semua port mendengarkan.

Mungkin menggunakan keduanya, satu untuk mengkonfirmasi port mana yang diatur untuk mysql dan yang lainnya untuk memeriksa apakah sistem mendengarkan melalui port itu.

Klien saya menggunakan CentOS 6.6 dan saya telah menemukan file my.conf di / etc /, jadi saya menggunakan:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.