ข้อผิดพลาด 2003 (HY000): ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL บน '127.0.0.1' (111)


139

ฉันใช้คำสั่งต่อไปนี้:

mysql -u root -h 127.0.0.1 -p

และข้อความแสดงข้อผิดพลาดคือ:

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

ใครสามารถช่วยแก้ไขได้บ้าง


3
mysql daemon กำลังทำงานอยู่หรือไม่ yot มีไฟร์วอลล์หรือไม่? คุณสามารถเทลเน็ตไปยัง MySQL พอร์ตเริ่มต้นคือ 306 ดังนั้น - Telnet localhost 3306
mmmmmm

mysql daemon กำลังรัน ฉันแน่ใจ.
Charlie Epps

1
เป็นแค่ฉันหรือถ้าคุณกำลังเชื่อมต่อกับเซิร์ฟเวอร์ mysql ภายในคุณไม่จำเป็นต้องระบุโฮสต์เช่น mysql -u root -p ควรใช้งานได้หรือไม่
RMcLeod

เพื่อให้แน่ใจว่าคุณกำลังพยายามเชื่อมต่อกับเซิร์ฟเวอร์ db ในเครื่องหรือไม่?
John Kane

ฉันติดตั้ง mysql ใหม่บน ubuntu-12.04.2 เวอร์ชันคือ 14.14 Distrib 5.5.32 สำหรับ debian-linux-gnu (x86_64) โดยใช้ readline 6.2 การกำหนดค่าเริ่มต้นจะไม่มี 'ข้ามเครือข่าย' ดังนั้นคุณจะไม่พบข้อผิดพลาดกับเวอร์ชันนี้

คำตอบ:


224

หากคุณกำลังใช้ubuntuคุณต้องใช้ขั้นตอนต่อไปนี้เพื่อหลีกเลี่ยงข้อผิดพลาดนี้ (หากไม่มีการเปิดใช้งานการจำลองแบบ):

  1. เรียกใช้คำสั่ง vim /etc/mysql/my.cnf
  2. แสดงความคิดเห็นbind-address = 127.0.0.1โดยใช้สัญลักษณ์ #
  3. รีสตาร์ทเซิร์ฟเวอร์ mysql ของคุณหนึ่งครั้ง

อัปเดต

ในขั้นตอนที่ 1 ถ้าคุณไม่สามารถหาbind-addressในmy.cnfไฟล์มองหามันใน/etc/mysql/mysql.conf.d/mysqld.cnfไฟล์

อัปเดตในกรณีที่เปิดใช้งานการจำลองแบบ MySQL

ลองเชื่อมต่อเซิร์ฟเวอร์ MySQL ที่เซิร์ฟเวอร์IPMySQL ผูกใน 'my.cnf instead oflocalhost หรือ 127.0.0.1`


8
ขอบคุณ!!! ฉันพยายามคิดออกมานานแล้ว! service mysql restartผมออกความเห็นเส้นที่บันทึกไฟล์ไว้แล้ววิ่ง และตอนนี้มันใช้งานได้แล้ว!
Ryan

ในกรณีของฉันฉันมีที่อยู่ของเซิร์ฟเวอร์แทนที่จะเป็น 127.0.0.1 สำหรับที่อยู่ผูก หากเป็นกรณีนี้สำหรับคุณคุณจะต้องแสดงความคิดเห็นเช่นกัน
Vlad Schnakovszki

4
ไม่มีbind-address = 127.0.0.1ใน/etc/mysql/my.cnf
RegarBoy

6
@developer ฉันพบของฉันที่นี่: /etc/mysql/mysql.conf.d/mysqld.cnf
เมื่อ

ฉันเปลี่ยน bind-address = <main server ip> แต่รีสตาร์ท mysql ไม่ได้
Avi Kehat

14

พยายามlocalhostแทนที่จะ127.0.0.1เชื่อมต่อหรือในconnection-configไฟล์. ทำงานให้ฉันบนเซิร์ฟเวอร์ Debian Squeeze


FYI หากคุณระบุ localhost นั่นจะบอกให้ Mysql เชื่อมต่อผ่านซ็อกเก็ต unix (/var/run/mysqld/mysqld.sock บน ubuntu) แทนที่จะเป็นผ่านซ็อกเก็ต TCP
Duke

8

สิ่งนี้เกิดขึ้นเมื่อคุณลืมเริ่มต้นฐานข้อมูลก่อนที่จะเชื่อมต่อ:

mysql.server start

แล้ว

mysql -u root -p -h 127.0.0.1

ในเทอร์มินัลบน mac และ linux ฉันเชื่อว่ามันเหมือนกันใน Windows CMD แต่ฉันไม่แน่ใจ
Henry

ฉันต้องเริ่มเซิร์ฟเวอร์ MySQL โดยใช้sudo service mysqld startในอินสแตนซ์ AWS EC2 ของฉันกับ MySQL Community Server
harshainfo

7

ในกรณีของฉัน (การเชื่อมต่อระยะไกล) ช่วยปิดไฟร์วอลล์บนเซิร์ฟเวอร์

service iptables stop

@ram อาจเป็นไปได้ว่าคุณกำลังใช้ไฟร์วอลล์อื่นอยู่ หรือปัญหาของคุณไม่ใช่ไฟร์วอลล์เลย ตรวจสอบเอกสารสำหรับ linux distro ของคุณ
Bunyk

1
@ram tryservice firewalld stop
Maxim Mazurok

1
โดยทั่วไป MySQL จะทำงานบนพอร์ต 3306 ดังนั้นให้เพิ่มลงในไฟร์วอลล์ของคุณ
kurdtpage

ขอบคุณมาก! ฉันต้องปิดไฟร์วอลล์เพื่อให้ทำงานได้เช่นกัน:sudo ufw disable
charlchad

6

ปัญหานี้อาจเกิดขึ้นเนื่องจากเซิร์ฟเวอร์ MySQL ของคุณไม่ได้ติดตั้งและทำงานอยู่ ในการทำพร้อมรับคำสั่งเริ่มต้นในฐานะผู้ดูแลระบบและป้อนคำสั่ง:

"C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin\mysqld" --install

หากคุณได้รับข้อความ "ติดตั้งบริการสำเร็จ" คุณจะต้องเริ่มบริการ MySQL โดยไปที่หน้าต่าง Services (Task Manager -> Services -> Open Services) ค้นหา MySQL และเริ่มจากแถบนำทางด้านบน แล้วถ้าลองเปิด mysql.exe ก็จะใช้ได้


2
ความผิดพลาดเล็ก ๆ น้อย ๆแล้วcd "C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin" mysqld --installนอกจากนี้หมายเลขเซิร์ฟเวอร์ขึ้นอยู่กับการดาวน์โหลด
Dejazmach

การทำเช่นนี้ช่วยแก้ปัญหาของฉัน
Steffi Keran Rani J

6

ดูmy.cnfไฟล์หากมี[client]ส่วนและportเป็นส่วนอื่นที่ไม่ใช่พอร์ตการฟังจริง (ค่าเริ่มต้น 3306) คุณต้องเชื่อมต่อเซิร์ฟเวอร์ด้วยพารามิเตอร์ที่ชัดเจน-P 3306เช่น

mysql -u รูท -h 127.0.0.1 -p -P 3306


ฉันจะค้นหาไฟล์my.cnf. ไม่มีในเซิร์ฟเวอร์ wamp ในแล็ปท็อปของฉัน
Deepak Keynes

บน windows มักเรียก 'my.ini'
Yu Jiaao

พอร์ตสำหรับฉันคือปัญหา ขอบคุณ
Chandra Eskay

0

คุณต้องเปลี่ยนพารามิเตอร์ bind-address เป็น 127.0.0.1 ในไฟล์ config mysql (my.ini หรือ my.cnf) หรือใช้พารามิเตอร์ที่กำหนดไว้ที่นั่น

หากไม่ได้ผลคุณควรตรวจสอบว่าบริการ mysql กำลังทำงานอยู่


1
ฉันได้เพิ่มบรรทัด "bind-address = 127.0.0.1" ลงในไฟล์ my.cnf แต่มันไม่ได้ผล
Charlie Epps

3
หากมีบรรทัดนี้ mysql จะฟังเฉพาะที่อยู่ในรายการเท่านั้น หากต้องการเปิดใช้งานการเข้าถึงระยะไกลคุณควรลบบรรทัดนี้ โปรดทราบถึงผลกระทบด้านความปลอดภัยนี้
webkraller

การเพิ่มbind-address =127.0.0.1my.cnf ปิดใช้งานการเชื่อมต่อระยะไกลไปยัง DB ดังนั้นแม้ว่ามันจะได้ผล (ซึ่งมันไม่ใช่) นั่นก็ไม่ใช่ทางออกที่ดี
Nir Alfasi

ผูกอยู่ 0.0.0.0 ควรจะยกเว้นกรณีที่คุณไม่ต้องการให้ใครอื่นที่จะเชื่อมต่อ
Marquis of Lorne

0

ในกรณีที่คุณกำลังรันบนพอร์ตที่ไม่ใช่ค่าเริ่มต้นคุณอาจลองใช้ที่--port=<port num> ให้มา--skip-networkingคือnot enabled.



0

ฉันก็ประสบปัญหาเดียวกัน สิ่งต่อไปนี้ช่วยฉันแก้ไขปัญหาไปที่แผงควบคุม -> เครื่องมือการดูแลระบบ -> บริการภายในสิ่งนี้คุณจะเห็นบริการ MySQL อย่างแน่นอนที่สุด: คลิกขวาและพูดว่าเริ่ม (บังคับให้เริ่ม)


0

สำหรับผู้ใช้ Docker - เมื่อพยายามเชื่อมต่อ sql ในเครื่องโดยใช้mysql -u root -h 127.0.0.1 -pและฐานข้อมูลของคุณกำลังทำงานบน Docker container ตรวจสอบให้แน่ใจว่าบริการ mysql ทำงานอยู่ (ตรวจสอบโดยใช้docker psและตรวจสอบว่าคุณอยู่ในพอร์ตที่ถูกต้องเช่นกัน) หากคอนเทนเนอร์นั้น คุณจะได้รับข้อผิดพลาดในการเชื่อมต่อ

แนวทางปฏิบัติที่ดีที่สุดคือการตั้งค่า ip ใน/etc/hostsเครื่องของคุณ:

127.0.0.1 db.local

และเรียกใช้โดย mysql -u root -h db.local -p


0

ลองอย่าปิด iptables และเปิดพอร์ต 3306

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

หรือsudo ufw allow 3306ถ้าคุณใช้ ufw.

ตรวจสอบ: netstat -lnp | grep mysqlคุณควรได้รับ sth เช่นนั้น:

cp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2048/mysqld         
tcp6       0      0 :::33060                :::*                    LISTEN      2048/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     514961   2048/mysqld          /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     514987   2048/mysqld          /var/run/mysqld/mysqlx.sock

หากคุณมีค่าว่างให้ลบ # ก่อนพอร์ต = 3306 ในไฟล์ cnf


0

หากคุณได้ลองทำตามทั้งหมดข้างต้นแล้ว แต่ยังไม่ได้ผล ตรวจสอบไฟร์วอลล์

ฉันพยายามเชื่อมต่อจากเครื่อง windows ไปยัง MySql Server 5.7.32 ที่ติดตั้งบนเครื่อง VirtualBox ที่มี CentOs7 ฉันลองทุกอย่างแล้ว แต่มันใช้งานไม่ได้แม้ว่าฉันจะ ping เครื่องได้ แต่ฉันไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySql ได้

ใน CentOs7 คำสั่งในการตรวจสอบไฟร์วอลล์คือ:

ขั้นตอนที่ 1: ตรวจสอบสถานะของบริการไฟร์วอลล์ของคุณ:

systemctl status firewallid.service

ขั้นตอนที่ 2: ปิดใช้งานบริการไฟร์วอลล์

systemctl stop firewallid.service


-1

โปรดตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ MySql ของคุณทำงานบน localhost

บน Linux

วิธีตรวจสอบว่าเซิร์ฟเวอร์ MySql กำลังทำงานอยู่หรือไม่:

sudo service mysql status

ในการเรียกใช้เซิร์ฟเวอร์ MySql:

sudo service mysql start

บน Windows

วิธีตรวจสอบว่าเซิร์ฟเวอร์ MySql กำลังทำงานอยู่หรือไม่:

C:\Windows\system32>net start

หาก MySql ไม่อยู่ในรายการคุณต้องเริ่ม / เรียกใช้ MySql

ในการเรียกใช้เซิร์ฟเวอร์ MySql:

C:\Windows\system32>net start mysql

หวังว่านี่จะช่วยได้


-2

ฉันเพิ่งรีสตาร์ทเซิร์ฟเวอร์ mysql และปัญหาได้รับการแก้ไขใน windows net stop MySQL จากนั้น net start MySQl ubuntu linux sudo service start mysql

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