Làm cách nào để kiểm tra cổng MySQL nào đang chạy và liệu nó có thể được kết nối không?


143

Tôi đã cài đặt MySQL và thậm chí đăng nhập vào đó với tư cách là người dùng.

Nhưng khi tôi cố gắng kết nối như thế này:

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

Không hoạt động. Không chắc chắn nếu cả hai được cho là làm việc, nhưng ít nhất một trong số họ nên :)

Làm thế nào tôi có thể chắc chắn rằng cổng thực sự là 3306? Có một lệnh linux để xem nó bằng cách nào đó? Ngoài ra, có cách nào chính xác hơn để thử nó qua một url không?

Câu trả lời:


207

Để tìm người nghe trên một cổng, hãy làm điều này:

netstat -tln

Bạn sẽ thấy một dòng trông như thế này nếu mysql thực sự đang nghe trên cổng đó.

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

Cổng 3306 là cổng mặc định của MySql.

Để kết nối, bạn chỉ cần sử dụng bất kỳ ứng dụng khách nào bạn yêu cầu, chẳng hạn như máy khách mysql cơ bản.

mysql -h localhost -u cơ sở dữ liệu người dùng

Hoặc một url được giải thích bởi mã thư viện của bạn.


2
Điều đó có nghĩa là gì khi thay vì 127.0.0.1:3306, nó nói 0.0.0.0:3306?
mbmast

1
@mbmast 127 ... có nghĩa là chỉ nghe trên máy chủ cục bộ (không thể truy cập bên ngoài). 0.0.0.0 có nghĩa là "tất cả các giao diện", và do đó (thường) có thể nhìn thấy bên ngoài.
Keith

Tôi nghĩ rằng có thể nhìn thấy bên ngoài, nó phải là địa chỉ IP của chính máy đó và 0.0.0.0 có nghĩa là dịch vụ không có sẵn ở bất cứ đâu. Tôi có sai không? Tôi có một hộp chạy MySQL, tường lửa có 3306 mở từ bất kỳ địa chỉ IP nào nhưng MySQL đang từ chối kết nối, tôi nghĩ vì hiện tại MySQL đang nghe trên 0.0.0.0.
mbmast

Nên hợp nhất câu trả lời này với câu trả lời của @ bortunac, tham chiếu tham -psố. Thêm quá trình thực sự giúp làm cho thông tin này hữu ích hơn.
Ragaar

1
@JBeck ba cờ, cho Linux. TCP, người nghe, không cần tra cứu tên. thấy man netstat.
Keith

138

Sử dụng máy khách Mysql:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

LRI 1146 (42S02): Bảng 'Performance_schema.global_variables' không tồn tại
Maria Ines Parnisari

65

grep port /etc/mysql/my.cnf (ít nhất là trong các tác phẩm debian / ubfox)

hoặc là

netstat -tlpn | grep mysql

kiểm chứng

địa chỉ liên kết 127.0.0.1

trong /etc/mysql/my.cnf để xem các hạn chế có thể có


32
netstat -tlpn

Nó sẽ hiển thị danh sách một cái gì đó như dưới đây:

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

Sử dụng như root cho tất cả các chi tiết. Các -ttùy chọn giới hạn sản lượng các kết nối TCP, -lcác cổng, -pliệt kê các tên chương trình và -nchương trình phiên bản số của cổng thay vì một phiên bản được đặt tên.

Bằng cách này, bạn có thể thấy tên quy trình và cổng.


1
Không làm việc cho tôi - Tôi đã nhận được "tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -"
Bryan

7

Chỉ thử sử dụng tùy chọn -e( --execute):

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

Thay thế rootbằng "tên người dùng" và "mật khẩu" của bạn


6

Cả hai URL đều không chính xác - nên

jdbc:mysql://host:port/database

Tôi nghĩ rằng nó đã đi mà không nói, nhưng kết nối với cơ sở dữ liệu với Java đòi hỏi trình điều khiển JDBC. Bạn sẽ cần trình điều khiển JDBC của MySQL .

Có lẽ bạn có thể kết nối bằng cách sử dụng ổ cắm qua TCP / IP. Kiểm tra các tài liệu MySQL .

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

CẬP NHẬT:

Tôi đã cố gắng telnet vào MySQL ( telnet ip 3306), nhưng nó không hoạt động:

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

Tôi nghĩ rằng đây là những gì bạn có trong tâm trí.


Có vẻ như nó không hoạt động khi tôi đã thử nó trong mã của mình :( Ngoài ra khi tôi dán nó vào trình duyệt, Firefox nói rằng nó không thể mở một thứ như vậy. Tôi có thể dùng thử ở đâu? - Cảm ơn bạn!
GeekedOut

Vâng, bạn không thể mở nó trong một trình duyệt. Bạn cần trình điều khiển JDBC MySQL và mã Java.
duffymo

3
Điều đó chỉ khi bạn đang sử dụng Java.
Keith

Tôi đang cố gắng thiết lập nó bằng Ruby on Rails thông qua tệp database.yml. Nhưng tôi chỉ cần số cổng thực sự.
GeekedOut

Điều này không thực sự trả lời câu hỏi.
AStopher

6

Một cách tiếp cận đơn giản hơn đối với một số người: Nếu bạn chỉ muốn kiểm tra xem MySQL có ở một cổng nào đó không, bạn có thể sử dụng lệnh sau trong terminal. Đã thử nghiệm trên mac. 3306 là cổng mặc định.

mysql --host=127.0.0.1 --port=3306

Nếu bạn đăng nhập thành công vào thiết bị đầu cuối vỏ MySQL, bạn vẫn ổn! Đây là đầu ra mà tôi nhận được khi đăng nhập thành công.

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 là cổng mặc định cho mysql. Kiểm tra nó với:

netstat -nl|grep 3306

cần đưa ra kết quả này:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* NGHE



3

Đối với tôi, câu trả lời của @ joseluisq mang lại:

LRI 1045 (28000): Truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu: NO)

Nhưng nó hoạt động theo cách này:

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

3

Trên mac os X, có hai tùy chọn. netstathoặc làlsof

Việc sử dụng netstatsẽ không hiển thị quá trình trên Mac OS X. vì vậy, sử dụng netstat, bạn chỉ có thể tìm kiếm theo cổng.
Sử dụng lsofsẽ hiển thị tên quá trình.

Tôi đã làm như sau khi tôi gặp phải xung đột cổng (container docker):

netstat -aln | grep 3306

Đầu ra: tcp46 0 0 *.3306 *.* LISTEN

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

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


2

Nếu bạn đang sử dụng hệ thống netstatkhông khả dụng (ví dụ: RHEL 7 và các bản phát hành Debian gần đây hơn), bạn có thể sử dụng ss, như sau:

sudo ss -tlpn | grep mysql

Và bạn sẽ nhận được một cái gì đó như sau cho đầu ra:

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

Cột thứ tư là Local Address:Port. Vì vậy, trong trường hợp này Mysql đang nghe trên cổng 3306, mặc định.


1

Tôi đồng ý với giải pháp của @ bortunac. my.conf là đặc trưng của mysql trong khi netstat sẽ cung cấp cho bạn tất cả các cổng nghe.

Có lẽ sử dụng cả hai, một để xác nhận cổng nào được đặt cho mysql và cổng kia để kiểm tra xem hệ thống có đang nghe qua cổng đó không.

Khách hàng của tôi sử dụng CentOS 6.6 và tôi đã tìm thấy tệp my.conf trong / etc /, vì vậy tôi đã sử dụng:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.