วิธีทดสอบว่า MySQL ทำงานบนพอร์ตใดและสามารถเชื่อมต่อได้อย่างไร


143

ฉันได้ติดตั้ง MySQL และแม้แต่เข้าสู่ระบบในฐานะผู้ใช้

แต่เมื่อฉันพยายามเชื่อมต่อแบบนี้:

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

ไม่ทำงาน ไม่แน่ใจว่าควรจะใช้งานได้หรือไม่ แต่อย่างน้อยควรมี :)

ฉันจะแน่ใจได้อย่างไรว่าพอร์ตนั้นแท้จริงแล้วคือ 3306 มีคำสั่ง linux เพื่อดูมันอย่างใด? นอกจากนี้ยังมีวิธีที่ถูกต้องมากกว่าในการลองผ่าน URL หรือไม่

คำตอบ:


207

ในการค้นหาผู้ฟังบนพอร์ตให้ทำดังนี้

netstat -tln

คุณควรเห็นบรรทัดที่มีลักษณะเช่นนี้หาก mysql กำลังฟังพอร์ตนั้นอยู่

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

พอร์ต 3306 เป็นพอร์ตเริ่มต้นของ MySql

ในการเชื่อมต่อคุณเพียงแค่ใช้ไคลเอนต์ที่คุณต้องการเช่นไคลเอนต์ mysql พื้นฐาน

ฐานข้อมูลผู้ใช้ mysql -h localhost -u

หรือ URL ที่ถูกตีความโดยรหัสห้องสมุดของคุณ


2
หมายความว่าอย่างไรเมื่อเทียบกับ 127.0.0.1:3306 มันบอกว่า 0.0.0.0:3306
mbmast

1
@mbmast the 127 ... หมายถึงฟังเฉพาะโฮสต์ท้องถิ่นเท่านั้น (ไม่สามารถเข้าถึงจากภายนอก) 0.0.0.0 หมายถึง "อินเตอร์เฟสทั้งหมด" ดังนั้นจึงเป็นปกติ
Keith

ฉันคิดว่าจะมองเห็นได้จากภายนอกมันจะต้องเป็นที่อยู่ IP ของเครื่องและ 0.0.0.0 หมายความว่าบริการไม่สามารถใช้ได้จากทุกที่ ฉันมีสิ่งผิดปกติหรือไม่ ฉันมีกล่องที่ใช้ MySQL ไฟร์วอลล์มี 3306 เปิดจากที่อยู่ IP ใด ๆ แต่ MySQL ปฏิเสธการเชื่อมต่อฉันคิดว่าขณะนี้ MySQL กำลังฟังบน 0.0.0.0
mbmast

ควรรวมสิ่งนี้กับคำตอบของ @ bortunac ซึ่งอ้างอิง-pพารามิเตอร์ การเพิ่มกระบวนการช่วยทำให้ข้อมูลนี้มีประโยชน์มากขึ้น
Ragaar

1
@JBeck สามธงสำหรับ Linux TCP, listeners, ไม่มีการค้นหาชื่อ เห็นman netstatไหม
Keith


65

grep port /etc/mysql/my.cnf (อย่างน้อยใน debian / ubuntu ทำงาน)

หรือ

netstat -tlpn | grep mysql

ตรวจสอบ

ผูกที่อยู่ 127.0.0.1

ใน /etc/mysql/my.cnf เพื่อดูข้อ จำกัด ที่เป็นไปได้


32
netstat -tlpn

มันจะแสดงรายการดังนี้:

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

ใช้เป็น root สำหรับรายละเอียดทั้งหมด -tตัวเลือก จำกัด การส่งออกไปยังการเชื่อมต่อ TCP, -lสำหรับพอร์ตฟัง-pรายชื่อโปรแกรมและ-nการแสดงรุ่นที่เป็นตัวเลขของพอร์ตแทนรุ่นชื่อ

ด้วยวิธีนี้คุณจะเห็นชื่อกระบวนการและพอร์ต


1
ใช้งานไม่ได้สำหรับฉัน - ฉันได้รับ "tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -"
Bryan

7

ลองใช้ตัวเลือก-e( --execute) เท่านั้น:

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

แทนที่rootด้วย "ชื่อผู้ใช้" และ "รหัสผ่าน" ของคุณ


6

URL ทั้งสองไม่ถูกต้อง - ควรเป็น

jdbc:mysql://host:port/database

ฉันคิดว่ามันไปโดยไม่บอก แต่การเชื่อมต่อกับฐานข้อมูลด้วย Java ต้องใช้ไดรเวอร์ JDBC คุณจะต้องขับรถ MySQL JDBC

บางทีคุณสามารถเชื่อมต่อโดยใช้ซ็อกเก็ตผ่าน TCP / IP ตรวจสอบเอกสาร MySQL

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

UPDATE:

ฉันพยายาม telnet ลงใน MySQL ( telnet ip 3306) แต่มันไม่ทำงาน:

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

ฉันคิดว่านี่คือสิ่งที่คุณมีในใจ


ดูเหมือนจะไม่ทำงานเมื่อฉันลองในรหัสของฉัน :( นอกจากนี้เมื่อฉันวางลงในเบราว์เซอร์ Firefox บอกว่ามันไม่สามารถเปิดสิ่งนั้นได้ฉันจะลองใช้ที่ไหน / อย่างไรดี - ขอบคุณ!
GeekedOut

ใช่คุณไม่สามารถเปิดได้ในเบราว์เซอร์ คุณต้องใช้ไดรเวอร์ MySQL JDBC และรหัส Java
duffymo

3
แค่นี้ก็ต่อเมื่อคุณใช้ Java
Keith

ฉันพยายามตั้งค่าโดยใช้ Ruby on Rails ผ่านไฟล์ database.yml แต่ฉันต้องการหมายเลขพอร์ตจริงๆ
GeekedOut

นี่ไม่ได้ตอบคำถามจริงๆ
AStopher

6

วิธีที่ง่ายกว่าสำหรับบางคน: หากคุณต้องการตรวจสอบว่า MySQL อยู่ในพอร์ตที่แน่นอนหรือไม่คุณสามารถใช้คำสั่งต่อไปนี้ในเทอร์มินัล ทดสอบบน mac 3306 เป็นพอร์ตเริ่มต้น

mysql --host=127.0.0.1 --port=3306

หากคุณประสบความสำเร็จในการล็อกอินเข้าสู่เทอร์มินัลเชลล์ของ MySQL คุณก็ทำได้ดี! นี่คือผลลัพธ์ที่ฉันได้รับจากการเข้าสู่ระบบที่ประสบความสำเร็จ

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 เป็นพอร์ตเริ่มต้นสำหรับ mysql ตรวจสอบกับ:

netstat -nl|grep 3306

มันควรให้ผลลัพธ์นี้:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN



3

สำหรับฉันคำตอบของ @ joseluisq ให้ผล:

ข้อผิดพลาด 1045 (28000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost' (ใช้รหัสผ่าน: NO)

แต่มันก็ใช้วิธีนี้:

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

3

บน mac os X มีสองตัวเลือก netstatหรือlsof

การใช้netstatจะไม่แสดงกระบวนการใน Mac OS X ดังนั้นการใช้ netstat คุณสามารถค้นหาได้เฉพาะพอร์ต
การใช้lsofจะแสดงชื่อกระบวนการ

ฉันทำสิ่งต่อไปนี้ขณะที่ฉันพบกับข้อขัดแย้งของพอร์ต (คอนเทนเนอร์นักเทียบท่า):

netstat -aln | grep 3306

ขาออก: tcp46 0 0 *.3306 *.* LISTEN

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

ขาออก: mysqld 60608 _mysql 31u IPv6 0x2ebc4b8d88d9ec6b 0t0 TCP *:3306 (LISTEN)


2

หากคุณอยู่ในระบบที่netstatไม่สามารถใช้งานได้ (เช่น RHEL 7 และรุ่นเดเบียนล่าสุด) คุณสามารถใช้งานssได้ดังต่อไปนี้:

sudo ss -tlpn | grep mysql

และคุณจะได้ผลลัพธ์ดังนี้:

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

Local Address:Portคอลัมน์ที่สี่คือ ดังนั้นในกรณีนี้ Mysql กำลังฟังพอร์ต 3306 ซึ่งเป็นค่าเริ่มต้น


1

ฉันเห็นด้วยกับโซลูชันของ @ bortunac my.conf นั้นเฉพาะ MySQL ในขณะที่ netstat จะให้พอร์ตการฟังทั้งหมดแก่คุณ

อาจใช้ทั้งสองอันหนึ่งเพื่อยืนยันว่าพอร์ตใดถูกตั้งค่าไว้สำหรับ mysql และอีกอันหนึ่งเพื่อตรวจสอบว่าระบบกำลังฟังผ่านพอร์ตนั้น

ลูกค้าของฉันใช้ CentOS 6.6 และฉันพบไฟล์ my.conf ภายใต้ / etc / ดังนั้นฉันจึงใช้:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.