MySQL ปฏิเสธที่จะยอมรับการเชื่อมต่อระยะไกล


13

ฉันเพิ่งติดตั้งเซิร์ฟเวอร์อูบุนตูสดพร้อม mysql (percona 5.5) แต่มันปฏิเสธที่จะยอมรับการเชื่อมต่อจากโฮสต์ระยะไกล

นี่คือสิ่งที่เกิดขึ้นถ้าฉันพยายามเชื่อมต่อกับเซิร์ฟเวอร์นี้จากระยะไกล:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

เมื่อฉันตรวจสอบว่า mysql ฟังการเชื่อมต่อระยะไกลฉันเห็นสิ่งนี้:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

อย่างที่คุณเห็นมันพูดว่า127.0.0.1:3306ซึ่งหมายความว่า "ฉันยอมรับการเชื่อมต่อในท้องถิ่นเท่านั้น"

ฉันตรวจสอบตัวแปรskip_networkingและของฉันbind-address- ทุกอย่างถูกปิด:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

ฉันมีเซิร์ฟเวอร์อื่นที่มีการกำหนดค่าเดียวกันและใช้งานได้ดี:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

อะไรคือสาเหตุของสิ่งนี้ ฉันจะทำให้ mysql ตอบสนองต่อการเชื่อมต่อระยะไกลได้อย่างไร


โปรดทราบว่าตัวแปรbind_addressนั้นมีให้บริการตั้งแต่รุ่น 5.6 ( bugs.mysql.com/bug.php?id=44355 ) ดังนั้นมันจะส่งคืนชุดว่างใน v5.5 แม้ว่าจะตั้งค่าไว้ก็ตาม
ขนม

แสดงการตั้งค่า my.cnf ของคุณกับเรา
user9517

คุณตรวจสอบปัญหาที่อยู่นอก mySQL เช่นไฟร์วอลล์หรือปัญหาการกำหนดเส้นทางหรือไม่?
Stese

คำตอบ:



0

อาจเป็นเพราะตารางผู้ใช้ฐานข้อมูล mysql (ใช้ mysql; show tables;) หากการผูกกับ 0.0.0.0 ไม่ได้ผลสำหรับคุณลองให้โฮสต์ '%' แทน 'localhost' ในตารางนั้น

ตัวอย่างเช่นลองสร้างผู้ใช้ที่ชอบ:

สร้างชื่อผู้ใช้ของคุณ @ '%' ที่ระบุโดย 'your รหัสผ่าน'

ant พยายามเชื่อมต่อกับผู้ใช้รายนั้น


3
การเชื่อมต่อถูกปฏิเสธโดยทั่วไปหมายความว่าไม่มีสิ่งใดฟังบน IP ที่เกี่ยวข้อง: พอร์ต
user9517

จริงฉันถูกแฟลชโดย 'ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL' ฉันไม่จำ telnet ขอโทษ
periket2000

"ไม่สามารถเชื่อมต่อกับ MySQL" ไม่ได้เกิดจากสิทธิ์ที่ผู้ใช้ไม่สามารถใช้งานได้ เป็นคู่ {IP: พอร์ต} ที่ไม่ตรงกับความพยายามในการเชื่อมต่อ
Fabien Haddadi

0

เมื่อทุกอย่างล้มเหลวและคุณแน่ใจว่าเซิร์ฟเวอร์กำลังฟังพอร์ตเริ่มต้นและคุณพยายามเชื่อมต่อกับไคลเอนต์ mysql อย่างหมดจดจากโฮสต์อื่นให้ลองระบุพอร์ตบน URL ของคำสั่ง mysql

แปลกเพราะฉันต้องใช้ไวยากรณ์ต่อไปนี้:

mysql -h someHost --port=3306 -u someUser -p someDb

ฉันพบสิ่งนี้ (ข้อผิดพลาด?) โดยบังเอิญ (หลังจากขนของฉันสูญเสีย :))

การตั้งค่าของฉัน: เดเบียนเจสซี, สด mysql 5.7.18, ผู้ใช้ / ฐานข้อมูลที่สร้าง, ที่อยู่ผูกความเห็นออก, mysqld รีสตาร์ท


คำอธิบายที่สมเหตุสมผลคือเซิร์ฟเวอร์ MySQL ที่บางคนกำลังฟังอยู่ใน 3306 ตามที่แสดงโดยคำสั่ง - พอร์ต แต่ไบนารีไคลเอนต์ mysql ของคุณมาจากรุ่น MariaDB ... ดังนั้นจึงใช้พอร์ต 3307 เป็นค่าเริ่มต้นเว้นแต่จะระบุไว้เป็นอย่างอื่น ตรวจสอบที่มาของไคลเอนต์ mysql ไบนารีที่คุณใช้ คำแนะนำ: ตรวจสอบตัวแปรสภาพแวดล้อม PATH ของคุณด้วย ...
Fabien Haddadi

0

ฉันเพิ่งมีปัญหานี้และปัญหาของฉันดูเหมือนจะเกี่ยวข้องกับไฟร์วอลล์ BTW - ขอบคุณ @Temnovit สำหรับคำสั่งการแก้ไขปัญหา Mysql

ฉันใช้ netstat เพื่อบอกเซิร์ฟเวอร์ทำงานและบนพอร์ตที่ถูกต้อง ฉันสามารถบอกได้ว่าเซิร์ฟเวอร์ของฉันไม่ยอมรับการเชื่อมต่อบนพอร์ตนั้นด้วยคำสั่ง telnet อย่างง่าย

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

การติดตามคำตอบที่เป็นประโยชน์อื่นเกี่ยวกับคำสั่งไฟร์วอลล์ของ Fedora ฉันสามารถเปิดพอร์ตที่ถูกต้องได้

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

คำสั่ง telnet ของฉันประสบความสำเร็จ

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

หากคุณยังคงมีปัญหาน่าจะเป็นปัญหาสิทธิ์ของผู้ใช้


0

ฉันmariadbติดตั้งแล้ว จิตวิญญาณคือการปรับเปลี่ยนที่bind-addressตั้งอยู่ที่/etc/mysql/mariadb.conf.d/50-server.cnf


-1

วิธีการแก้ปัญหาที่อธิบายไว้ในลิงค์ร้องควรแก้ปัญหาของคุณ http://www.debianhelp.co.uk/remotemysql.htm


2
bml13 การอ้างอิงลิงก์เพื่อสนับสนุนคำตอบของคุณคือแนวปฏิบัติที่ยอดเยี่ยม แต่เราต้องการให้ผู้คนเขียนคำตอบที่นี่และเพิ่มลิงก์ไม่ใช่เพียงแค่วางลิงก์และปล่อยไว้ที่นั่น
MadHatter

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