ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/tmp/mysql.sock


126

เมื่อฉันพยายามเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในระหว่างชุดทดสอบของฉันล้มเหลวด้วยข้อผิดพลาด:

OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")

อย่างไรก็ตามฉันสามารถเชื่อมต่อกับ MySQL ได้ตลอดเวลาโดยเรียกใช้mysqlโปรแกรมบรรทัดคำสั่ง A ps aux | grep mysqlแสดงเซิร์ฟเวอร์กำลังทำงานและ stat /tmp/mysql.sockยืนยันว่ามีซ็อกเก็ตอยู่ นอกจากนี้หากฉันเปิดดีบักเกอร์ในexceptข้อยกเว้นนั้นฉันสามารถเชื่อมต่อกับพารามิเตอร์เดียวกันได้อย่างน่าเชื่อถือ

ปัญหานี้สร้างซ้ำได้ค่อนข้างน่าเชื่อถือ แต่ดูเหมือนจะไม่ 100% เพราะทุกๆครั้งในพระจันทร์สีน้ำเงินชุดทดสอบของฉันจะทำงานโดยไม่กดปุ่มข้อผิดพลาดนี้ เมื่อฉันพยายามที่จะทำงานกับsudo dtrussมันไม่ได้ทำซ้ำ

รหัสไคลเอนต์ทั้งหมดอยู่ใน Python แม้ว่าฉันจะไม่สามารถเข้าใจได้ว่าจะเกี่ยวข้องอย่างไร

การเปลี่ยนไปใช้โฮสต์127.0.0.1ทำให้เกิดข้อผิดพลาด:

DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)

1
เป็นไปได้ไหมว่าคุณกำลังกดปุ่มฐานข้อมูลด้วยการเชื่อมต่อพร้อมกันจำนวนมาก? อาจลองเพิ่มmax_connectionsไฟล์ Conf MySQL ของคุณ?
dgel

2
ไม่mysql -h 127.0.0.1ทำงานจากบรรทัดคำสั่งหรือไม่ ฉันไม่แน่ใจว่าเซิร์ฟเวอร์ mysql ของคุณกำลังฟังอยู่บนพอร์ต TCP จริงๆ
Eli

1
คุณแน่ใจหรือไม่ว่าคุณมีไลบรารีไคลเอนต์ Python MySQL เวอร์ชันที่ถูกต้องสำหรับ MySQL เวอร์ชันของคุณ นอกจากนี้ยังmysql -h localhostทำงานได้อย่างน่าเชื่อถือ?
โปรเก่า

2
MySQL บันทึกอะไรลงในบันทึกข้อผิดพลาดหรือไม่ ตรวจสอบสิทธิ์ของไฟล์ใน /tmp/mysql.sock และไดเร็กทอรีข้อมูล mysql ของคุณ ข้อผิดพลาดจะเกิดขึ้นด้วยหรือไม่หากคุณเรียกใช้ชุดทดสอบเป็นรูท (sudo)
Erik Cederstrand

2
คำแนะนำเหล่านี้จำนวนมากครอบคลุมโดยคู่มืออ้างอิง MySQL อย่างเป็นทางการซึ่งฉันอ้างอิงในคำตอบของฉันด้านล่าง เป็นการใช้เวลาที่ดีกว่าในการอ่านคำแนะนำด้วยตนเองอ้างอิง MySQL อย่างเป็นระบบแทนที่จะลองใช้คำแนะนำเหล่านั้นเพียงหนึ่งหรือสองข้อ
jtoberon

คำตอบ:


152
sudo /usr/local/mysql/support-files/mysql.server start 

สิ่งนี้ได้ผลสำหรับฉัน อย่างไรก็ตามหากไม่ได้ผลให้ตรวจสอบให้แน่ใจว่า mysqld กำลังทำงานอยู่และลองเชื่อมต่อ


1
ฉันใช้เวลากว่า 2 สัปดาห์ (ไม่ได้ล้อเล่น) และนี่เป็นสิ่งที่ใกล้เคียงที่สุดที่ฉันจะสามารถเชื่อมต่อได้ในที่สุด อย่างไรก็ตามมันติดอยู่ที่ 'เริ่ม mysql' ..... แต่ขอบคุณโพสต์ที่ดี!
L. Klotz

2
sudo: /usr/local/mysql/support-files/mysql.server: ไม่พบคำสั่ง ทำไม?
Syam Pillai

1
ทำไมต้องเป็นลำไส้ใหญ่หลัง sudo? ตรวจสอบว่ามีเส้นทางอยู่หรือไม่
Pratyay

หรือถ้า mysql ติดตั้งกับ homebrew: sudo /usr/local/Cellar/mysql/<version>/support-files/mysql.server เริ่มต้น
Majoren

1
เซิร์ฟเวอร์หยุดทำงานโดยไม่อัปเดตไฟล์ PID (/var/lib/mysql/Saranshs-MacBook-Pro.local.pid)
saran3h

91

ส่วนที่เกี่ยวข้องของคู่มือ MySQL เป็นที่นี่ ฉันจะเริ่มต้นด้วยการทำตามขั้นตอนการดีบักที่ระบุไว้ที่นั่น

นอกจากนี้อย่าลืมว่า localhost และ 127.0.0.1 ไม่ใช่สิ่งเดียวกันในบริบทนี้:

  • หากโฮสต์ถูกตั้งค่าเป็นจะlocalhostใช้ซ็อกเก็ตหรือท่อ
  • หากโฮสต์ถูกตั้งค่า127.0.0.1เป็นไคลเอ็นต์จะถูกบังคับให้ใช้ TCP / IP

ตัวอย่างเช่นคุณสามารถตรวจสอบว่าฐานข้อมูลของคุณกำลังรับฟังการเชื่อมต่อ TCP vi netstat -nlpหรือไม่ ดูเหมือนว่ากำลังฟังการเชื่อมต่อ TCP เพราะคุณบอกว่าใช้mysql -h 127.0.0.1งานได้ดี เพื่อตรวจสอบว่าคุณสามารถเชื่อมต่อกับฐานข้อมูลของคุณผ่านทางซ็อกเก็ต, mysql -h localhostการใช้งาน

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


แม้ว่าโดยทั่วไปแล้วการปฏิบัติตามขั้นตอนการวินิจฉัยที่กำหนดไว้จะเป็นความคิดที่ดีหากคุณอ่านคำถาม (และขั้นตอน) คุณจะเห็นว่าได้ปฏิบัติตามขั้นตอนและได้พิจารณาแล้วว่านี่ไม่ใช่ปัญหากับเซิร์ฟเวอร์ MySQL นี่เป็นสิ่งที่ต้องทำโดยเฉพาะกับไคลเอนต์ Python เนื่องจากการเข้าถึงอื่น ๆ ทั้งหมดผ่านซ็อกเก็ตทำงานได้ดีรวมถึงการเข้าถึงอื่น ๆ จาก Python
โปรเก่า

1
อะไรคือการลงคะแนนแปลก ๆ ฉันโพสต์ขั้นตอนที่กำหนดขึ้นด้วยเหตุผลหลายประการ: (1) คนอื่นโพสต์เพียงบางส่วนของขั้นตอนที่กำหนดไว้และจะดีกว่าที่จะเป็นระบบเกี่ยวกับการดีบัก (2) ดูเหมือนจะมีความสับสนเกี่ยวกับ localhost กับ 127.0.0.1 และ (3 ) คนอื่น ๆ ที่มีอาการ "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ mysql ในพื้นที่" อาจจะสะดุดกับคำถามนี้ ฉันทราบว่าเป็นไปได้ว่าเป็นไคลเอนต์ Python ซึ่งเป็นสาเหตุที่ฉันขอข้อมูลเพิ่มเติมเช่นเกี่ยวกับวิธีการสร้างอินสแตนซ์การเชื่อมต่อ
jtoberon

4
+1 ฉันได้รับข้อผิดพลาดนี้ขณะพยายามเชื่อมต่อกับ mysql ผ่านอุโมงค์ ssh (โดยใช้localhostเป็นโฮสต์) การเปลี่ยนเพื่อ127.0.0.1แก้ไข
krock

สำหรับบันทึกนี้แก้ไขปัญหาของฉัน: "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/tmp/mysql.sock'"
proinsias

ขอบคุณ! มันใช้งานได้สำหรับฉันการแก้ไขนี้ในขณะที่พยายามเชื่อมต่อกับ Docker maridb container
Lucian Oprea

87

สำหรับฉันปัญหาคือฉันไม่ได้ใช้งานเซิร์ฟเวอร์ mysql mysqlใช้เซิร์ฟเวอร์แรกและจากนั้นดำเนินการ

$ mysql.server start
$ mysql -h localhost -u root -p

28

ฉันเคยเห็นสิ่งนี้เกิดขึ้นที่ร้านของฉันเมื่อ devs ของฉันมีตัวจัดการสแต็กเช่น MAMP ที่ติดตั้งซึ่งมาพร้อมกับ MySQL ที่ติดตั้งไว้ในตำแหน่งที่ไม่ได้มาตรฐาน

ที่อาคารผู้โดยสารของคุณ

mysql_config --socket

ที่จะให้เส้นทางของคุณไปยังไฟล์ถุงเท้า ใช้เส้นทางนั้นและใช้ในพารามิเตอร์ DATABASES HOST ของคุณ

สิ่งที่คุณต้องทำคือชี้ของคุณ

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test',
        'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',
        'PORT': '',
    },
}

บันทึก

นอกจากนี้ยังเรียกใช้which mysql_configหากคุณมีเซิร์ฟเวอร์ mysql หลายอินสแตนซ์ที่ติดตั้งบนเครื่องคุณอาจเชื่อมต่อกับเซิร์ฟเวอร์ที่ไม่ถูกต้อง


จะเกิดอะไรขึ้นถ้าไฟล์ถุงเท้าของคุณหายไป?
AlxVallejo

ซื้อคู่อื่น? j / k นั่นหมายความว่าบริการ mysql ไม่ทำงาน เริ่ม / รีสตาร์ท mysql ของคุณ
Francis Yaconiello

6
ในกรณีของฉันการเปลี่ยน HOST จาก "localhost" เป็น "127.0.0.1" ช่วยแก้ปัญหาได้
lucaswxp

@lucaswxp: ในกรณีของฉันฉันต้องเปลี่ยน localhost ด้วยชื่อโดเมน
Anshul Mishra

19

ฉันเพิ่งเปลี่ยนHOSTจากlocalhostเป็น127.0.0.1และมันก็ใช้ได้ดี:

# settings.py of Django project
...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '',
},
...

4
คงจะดีไม่น้อยที่ทราบว่าคุณเปลี่ยนไฟล์อะไรและอยู่ที่ไหน
Empi

1
ในsettings.pyโครงการ.
Sirbito X

11

เมื่อใดหากคุณสูญเสีย daemon mysql ใน mac OSx แต่มีอยู่ในพา ธ อื่นสำหรับตัวอย่างใน private / var ให้ทำตามคำสั่งต่อไปนี้

1)

ln -s /private/var/mysql/mysql.sock /tmp/mysql.sock

2) เริ่มการเชื่อมต่อของคุณเป็น mysql ใหม่ด้วย:

mysql -u username -p -h host databasename

ใช้งานได้กับ mariadb


9

เรียกใช้ cmd ด้านล่างในเทอร์มินัล

/ usr / local / MySQL / bin / mysqld_safe

ใส่คำอธิบายภาพที่นี่

จากนั้นรีสตาร์ทเครื่องเพื่อให้มีผล มันได้ผล!!


1
สิ่งนี้ใช้ได้ผลกับฉันบน iMac ที่ใช้ High Sierra ซึ่งได้รับการอัปเกรดเป็น Mojave สิ่งที่ต้องเกิดขึ้นคือไฟล์ mysql.sock อยู่ใน tmp และถูกลบไปในการอัปเกรด เนื่องจากซ็อกเก็ตถูกสร้างขึ้นโดยอัตโนมัติในการเริ่ม MySQL คุณเพียงแค่ต้องแน่ใจว่า MySQL ปิดตัวลงจากนั้นเริ่มต้นในเซฟโหมดดังที่กล่าวมา ไฟล์ mysql.sock ปรากฏขึ้นอย่างน่าอัศจรรย์
เดวิด

8

ตรวจสอบจำนวนไฟล์ที่เปิดสำหรับกระบวนการ mysql โดยใช้คำสั่ง lsof

เพิ่มขีด จำกัด ไฟล์ที่เปิดและเรียกใช้อีกครั้ง


ฉันเคยเจอสิ่งนี้มาก่อนและคุณไม่สามารถทำได้ผ่านไฟล์. cnf ของคุณ คุณอาจต้องulimitเพิ่มจำนวนไฟล์ที่เปิดไว้ที่ไคลเอนต์และเซิร์ฟเวอร์ของคุณได้รับอนุญาตให้เปิดได้ หากคุณใช้อูบุนตูเวอร์ชันล่าสุดอาจต้องแก้ไขสคริปต์ mysql upstart ใน / etc / init แต่หวังว่าคุณจะทำได้ในไฟล์. cnf
การ

8

หลังจากลองใช้วิธีแก้ปัญหาเหล่านี้เล็กน้อยและไม่ประสบความสำเร็จนี่คือสิ่งที่ได้ผลสำหรับฉัน:

  1. รีสตาร์ทระบบ
  2. mysql.server เริ่มต้น
  3. ที่ประสบความสำเร็จ!

7

นี่อาจเป็นหนึ่งในปัญหาต่อไปนี้

  1. ล็อค mysql ไม่ถูกต้อง วิธีแก้ปัญหา: คุณต้องหาซ็อกเก็ต mysql ที่ถูกต้องโดย

mysqladmin -p ตัวแปร | grep ซ็อกเก็ต

จากนั้นใส่ลงในรหัสการเชื่อมต่อฐานข้อมูลของคุณ:

pymysql.connect(db='db', user='user', passwd='pwd', unix_socket="/tmp/mysql.sock")

/tmp/mysql.sock เป็นผลตอบแทนจาก grep

2. โซลูชันพอร์ต mysql ไม่ถูกต้อง: คุณต้องหาพอร์ต mysql ที่ถูกต้อง:

mysqladmin -p variables | grep port

จากนั้นในรหัสของคุณ:

pymysql.connect(db='db', user='user', passwd='pwd', host='localhost', port=3306)

3306 คือพอร์ตที่ส่งคืนจาก grep

ฉันคิดว่าตัวเลือกแรกจะช่วยแก้ปัญหาของคุณได้


6

สำหรับผู้ที่อัปเกรดจาก 5.7 เป็น 8.0 ผ่าน homebrew ข้อผิดพลาดนี้น่าจะเกิดจากการอัปเกรดไม่เสร็จสมบูรณ์ ในกรณีของฉันmysql.server startทำให้ฉันมีข้อผิดพลาดต่อไปนี้:

ข้อผิดพลาด! เซิร์ฟเวอร์หยุดทำงานโดยไม่อัปเดตไฟล์ PID

จากนั้นฉันตรวจสอบไฟล์บันทึกผ่านcat /usr/local/var/mysql/YOURS.err | tail -n 50และพบสิ่งต่อไปนี้:

InnoDB: ไม่รองรับการอัปเกรดหลังจากเกิดข้อขัดข้อง

หากคุณอยู่บนเรือลำเดียวกันก่อนอื่นให้ติดตั้งmysql@5.7ผ่าน homebrew หยุดเซิร์ฟเวอร์จากนั้นเริ่มระบบ 8.0 อีกครั้ง

brew install mysql@5.7

/usr/local/opt/mysql@5.7/bin/mysql.server start
/usr/local/opt/mysql@5.7/bin/mysql.server stop

จากนั้น

mysql.server start

สิ่งนี้จะทำให้ MySQL (8.0) ของคุณทำงานได้อีกครั้ง


โดนเหมือนเดิมERROR! The server quit without updating PID fileอีกแล้ว
awebartisan

ในกรณีของฉันฉันเพิ่งติดตั้ง mysql@5.7 และลบล่าสุด ทุกอย่างเริ่มต้นขึ้น ไม่มีการลบฐานข้อมูล
Andrew Luca

4

ฉันคิดว่าฉันเคยเห็นพฤติกรรมเดียวกันนี้มาแล้ว แต่จำรายละเอียดไม่ได้
ในกรณีของเราปัญหาคือขณะที่ผู้ทดสอบเริ่มต้นการเชื่อมต่อฐานข้อมูลที่สัมพันธ์กับการโต้ตอบฐานข้อมูลแรกที่จำเป็นตัวอย่างเช่นโดยการนำเข้าโมดูลใน settings.py หรือ __init__.py บางส่วน ฉันจะพยายามขุดคุ้ยข้อมูลเพิ่มเติม แต่สิ่งนี้อาจกดกริ่งสำหรับกรณีของคุณแล้ว


4

ตรวจสอบให้แน่ใจว่า / etc / hosts ของคุณมี127.0.0.1 localhostอยู่และควรใช้งานได้ดี


น่าอัศจรรย์ (ด้วยความเคารพ) สิ่งนี้จัดเรียงให้ฉัน - ในการตรวจสอบสิ่งนี้ฉันพบว่าเมื่อพยายามตั้งค่า webdav Mavericks ได้เพิ่มบรรทัดเพิ่มเติม (อ่านไม่ออกโดยสิ้นเชิง) ลงในไฟล์โฮสต์ของฉันรวมถึงบรรทัดที่กำหนด localhost ใหม่
rob_was_taken

4

ฉันมีสองการคาดเดาที่ส่อเสียดในเรื่องนี้

การเชื่อมต่อ # 1

ตรวจสอบความเป็นไปได้ที่จะไม่สามารถเข้าถึง/tmp/mysql.sockไฟล์ได้ เมื่อฉันตั้งค่าฐานข้อมูล MySQL โดยปกติฉันจะปล่อยให้ไซต์ไฟล์ซ็อกเก็ตเข้า/var/lib/mysqlมา หากคุณลงชื่อเข้าใช้ mysql เป็นroot@localhostเซสชันระบบปฏิบัติการของคุณจำเป็นต้องเข้าถึง/tmpโฟลเดอร์ ตรวจสอบให้แน่ใจว่า/tmpมีสิทธิ์การเข้าถึงที่ถูกต้องใน OS ตรวจสอบให้แน่ใจว่าผู้ใช้ sudo สามารถอ่านไฟล์ในรูปแบบ/tmp.

การเชื่อมต่อ # 2

การเข้าถึง mysql ผ่านทาง127.0.0.1อาจทำให้เกิดความสับสนหากคุณไม่ให้ความสนใจ อย่างไร?

จากบรรทัดคำสั่งหากคุณเชื่อมต่อกับ MySQL ด้วย127.0.0.1คุณอาจต้องระบุโปรโตคอล TCP / IP

mysql -uroot -p -h127.0.0.1 --protocol=tcp

หรือลองใช้ชื่อ DNS

mysql -uroot -p -hDNSNAME

การดำเนินการนี้จะข้ามการเข้าสู่ระบบroot@localhostแต่ต้องแน่ใจว่าคุณได้root@'127.0.0.1'กำหนดไว้

ครั้งต่อไปที่คุณเชื่อมต่อกับ MySQL ให้เรียกใช้สิ่งนี้:

SELECT USER(),CURRENT_USER();

สิ่งนี้ให้อะไรกับคุณ?

  • USER ()รายงานว่าคุณพยายามตรวจสอบสิทธิ์ใน MySQL อย่างไร
  • CURRENT_USER ()รายงานว่าคุณได้รับอนุญาตให้ตรวจสอบสิทธิ์ใน MySQL ได้อย่างไร

หากฟังก์ชันเหล่านี้กลับมาพร้อมกับค่าเดียวกันแสดงว่าคุณกำลังเชื่อมต่อและพิสูจน์ตัวตนตามที่คาดไว้ หากค่าแตกต่างกันคุณอาจต้องสร้างผู้ใช้ที่root@127.0.0.1เกี่ยวข้อง


3

มีปัญหาเดียวกันนี้ ปรากฎmysqldว่าหยุดทำงานแล้ว (ฉันใช้ Mac OSX) ฉันเริ่มต้นใหม่และข้อผิดพลาดก็หายไป

ฉันพบว่าmysqldส่วนใหญ่ไม่ทำงานเนื่องจากลิงก์นี้: http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.html

สังเกตเคล็ดลับแรก!


3

หากคุณได้รับข้อผิดพลาดดังต่อไปนี้:

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

จากนั้นหาตำแหน่งไฟล์ mysqld.sock ของคุณแล้วเพิ่มไปที่ "HOST"

เช่นฉันใช้ xampp บน linux ดังนั้นmysqld.sockไฟล์ของฉันจึงอยู่ในตำแหน่งอื่น ดังนั้นจึงใช้ไม่ได้กับ ' /var/run/mysqld/mysqld.sock'

DATABASES = {

    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'asd',
        'USER' : 'root',
        'PASSWORD' : '',
        'HOST' : '/opt/lampp/var/mysql/mysql.sock',
        'PORT' : ''
    }
}

2

ตรวจสอบว่า mysql ของคุณไม่ถึงการเชื่อมต่อสูงสุดหรือไม่อยู่ในลูปการบูตบางประเภทซึ่งเกิดขึ้นบ่อยครั้งหากการตั้งค่าไม่ถูกต้องใน my.cnf

ใช้ ps aux | grep mysql เพื่อตรวจสอบว่า PID กำลังเปลี่ยนแปลงหรือไม่


2

ดูออนไลน์นานเกินไปที่จะไม่ให้ข้อมูล หลังจากพยายามพิมพ์พรอมต์ mysql จากบรรทัดคำสั่งฉันยังคงได้รับข้อความนี้:

ข้อผิดพลาด 2002 (HY000): ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/tmp/mysql.sock' (2)

นี่เป็นเพราะเซิร์ฟเวอร์ mysql ในพื้นที่ของฉันไม่ทำงานอีกต่อไป ในการรีสตาร์ทเซิร์ฟเวอร์ฉันไปที่

shell> cd /user/local/bin

mysql.server ของฉันอยู่ที่ไหน จากที่นี่เพียงพิมพ์:

shell> mysql.server start

สิ่งนี้จะเปิดเซิร์ฟเวอร์ mysql ภายในเครื่องอีกครั้ง

จากนั้นคุณสามารถรีเซ็ตรหัสผ่านรูทได้หากต้องการ ..

mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
->                   WHERE User='root';
mysql> FLUSH PRIVILEGES;

2

ฉันต้องฆ่า mysql ทุกอินสแตนซ์โดยการค้นหารหัสกระบวนการทั้งหมดก่อน:

ps aux | grep mysql

แล้วฆ่าพวกเขาออก:

ฆ่า -9 {pid}

แล้ว:

mysql.server เริ่มต้น

ทำงานให้ฉัน


1

ซ็อกเก็ตอยู่ใน / tmp ในระบบ Unix เนื่องจากโหมดและการเป็นเจ้าของบน / tmp อาจทำให้เกิดปัญหาได้ แต่ตราบใดที่คุณบอกเราว่าคุณสามารถใช้ mysql connexion ได้ตามปกติฉันเดาว่ามันไม่ใช่ปัญหาในระบบของคุณ การตรวจสอบเบื้องต้นควรจะย้าย mysql.sock ในไดเร็กทอรีที่เป็นกลางมากขึ้น

ความจริงที่ว่าปัญหาเกิดขึ้น "แบบสุ่ม" (หรือไม่ทุกครั้ง) ให้ฉันคิดว่าอาจเป็นปัญหาของเซิร์ฟเวอร์

  • / tmp ของคุณอยู่บนดิสก์มาตรฐานหรือบนเมาท์ที่แปลกใหม่ (เช่นใน RAM)?

  • / tmp ของคุณว่างเปล่า?

  • ไม่iotopแสดงให้คุณเห็นสิ่งผิดปกติเมื่อคุณพบปัญหาได้หรือไม่


0

กำหนดค่าการเชื่อมต่อ DB ของคุณในไดอะล็อก 'Manage DB Connections เลือก 'Standard (TCP / IP)' เป็นวิธีการเชื่อมต่อ

ดูหน้านี้สำหรับรายละเอียดเพิ่มเติม http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html

ตามหน้าอื่นนี้ไฟล์ซ็อกเก็ตจะถูกใช้แม้ว่าคุณจะระบุ localhost ก็ตาม

ไฟล์ซ็อกเก็ต Unix ถูกใช้หากคุณไม่ระบุชื่อโฮสต์หรือหากคุณระบุชื่อโฮสต์พิเศษ localhost

นอกจากนี้ยังแสดงวิธีตรวจสอบเซิร์ฟเวอร์ของคุณโดยเรียกใช้คำสั่งเหล่านี้:

หากกระบวนการ mysqld กำลังทำงานอยู่คุณสามารถตรวจสอบได้โดยลองใช้คำสั่งต่อไปนี้ หมายเลขพอร์ตหรือชื่อไฟล์ซ็อกเก็ต Unix อาจแตกต่างกันในการตั้งค่าของคุณ host_ip แสดงที่อยู่ IP ของเครื่องที่เซิร์ฟเวอร์กำลังทำงาน

shell> mysqladmin version 
shell> mysqladmin variables 
shell> mysqladmin -h `hostname` version variables 
shell> mysqladmin -h `hostname` --port=3306 version 
shell> mysqladmin -h host_ip version 
shell> mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version

0

ใน ubuntu14.04 คุณสามารถทำได้เพื่อแก้ปัญหานี้

zack@zack:~/pycodes/python-scraping/chapter5$ **mysqladmin -p variables|grep socket**
Enter password: 
| socket                                            | ***/var/run/mysqld/mysqld.sock***                                                                                            |
zack@zack:~/pycodes/python-scraping/chapter5$***ln -s  /var/run/mysqld/mysqld.sock /tmp/mysql.sock***
zack@zack:~/pycodes/python-scraping/chapter5$ ll /tmp/mysql.sock 
lrwxrwxrwx 1 zack zack 27 11 29 13:08 /tmp/mysql.sock -> /var/run/mysqld/mysqld.sock=

0

สำหรับฉันฉันแน่ใจว่า mysqld เริ่มทำงานแล้วและบรรทัดคำสั่ง mysql สามารถทำงานได้อย่างถูกต้อง แต่เซิร์ฟเวอร์ httpd แสดงปัญหา (ไม่สามารถเชื่อมต่อกับ mysql ผ่านซ็อกเก็ต)

ฉันเริ่มบริการด้วย mysqld_safe &

ในที่สุดฉันก็พบว่าเมื่อฉันเริ่มบริการ mysqld ด้วย service mysqld start มีปัญหา (ปัญหาการอนุญาต selinux) และเมื่อฉันแก้ไขปัญหา selinux และเริ่ม mysqld ด้วย "service mysqld start" ปัญหาการเชื่อมต่อ httpd จะหายไป แต่เมื่อฉันเริ่ม mysqld ด้วย mysqld_safe & mysqld สามารถทำงานได้ (ไคลเอนต์ mysql สามารถทำงานได้อย่างถูกต้อง) แต่ยังคงมีปัญหาเมื่อเชื่อมต่อกับ httpd.


0

หากเกี่ยวข้องกับซ็อกเก็ตให้อ่านไฟล์นี้

/etc/mysql/my.cnf

และดูว่าตำแหน่งซ็อกเก็ตมาตรฐานคืออะไร มันเป็นบรรทัดเช่น:

socket = /var/run/mysqld/mysqld.sock

ตอนนี้สร้างนามแฝงสำหรับเชลล์ของคุณเช่น:

alias mysql="mysql --socket=/var/run/mysqld/mysqld.sock"

วิธีนี้คุณไม่จำเป็นต้องมีสิทธิ์รูท


0

mysqldเพียงแค่พยายามที่จะเรียก

นี่คือสิ่งที่ไม่ได้ผลสำหรับฉันบน Mac หากไม่ได้ผลให้ลองไป/usr/local/var/mysql/<your_name>.errดูบันทึกข้อผิดพลาดโดยละเอียด


0
# shell script ,ignore the first 
$ $(dirname `which mysql`)\/mysql.server start

อาจเป็นประโยชน์


เหมือนกับคำตอบส่วนใหญ่ 'sudo /usr/local/mysql/support-files/mysql.server start' แต่ระบบปฏิบัติการที่แตกต่างกันอาจมีเส้นทางที่แตกต่างกันของ 'mysql.server' ดังนั้นฉันจึงพยายามเขียนบรรทัดคำสั่งหนึ่งบรรทัดซึ่งอาจ มีประโยชน์ในหลาย OS
陈也在哦

0

ใช้ MacOS Mojave 10.14.6 สำหรับ MySQL 8.0.19 ที่ติดตั้งผ่าน Homebrew

  • Ran sudo find / -name my.cnf
  • พบไฟล์ที่ /usr/local/etc/my.cnf

ทำงานเป็นเวลาแล้วในที่สุดข้อผิดพลาดก็กลับมา ถอนการติดตั้ง MySQL เวอร์ชัน Homebrew และติดตั้งไฟล์. dmg โดยตรงจากที่นี่

เชื่อมต่อกันอย่างมีความสุขตั้งแต่นั้นมา


0

ในกรณีของฉันสิ่งที่ช่วยได้คือแก้ไขไฟล์/etc/mysql/mysql.conf.d/mysqld.cnfและแทนที่บรรทัด:

socket      = /var/run/mysqld/mysqld.sock

กับ

socket      = /tmp/mysql.sock

จากนั้นฉันรีสตาร์ทเซิร์ฟเวอร์และทำงานได้ดี ที่ตลกคือถ้าฉันใส่สายกลับเหมือนเดิมแล้วรีสตาร์ทมันก็ยังใช้ได้ ..


0

เมื่อเร็ว ๆ นี้ฉันประสบปัญหาที่คล้ายกัน ผ่านคำตอบมากมาย ฉันทำให้มันทำงานตามขั้นตอน

  1. เปลี่ยนเส้นทางซ็อกเก็ตใน /etc/my.cnf (เนื่องจากฉันได้รับข้อผิดพลาดซ้ำ ๆ กับการอ้างอิง /tmp/mysql.sock) เพื่อเปลี่ยนเส้นทางซ็อกเก็ต
  2. เรียกใช้ mysqld_safe เพื่อรีสตาร์ทเซิร์ฟเวอร์เนื่องจากเป็นวิธีที่แนะนำในการรีสตาร์ทในกรณีที่เกิดข้อผิดพลาด อ้างอิงถึง mysqld_safe

0

สำหรับฉันเซิร์ฟเวอร์ mysql ไม่ทำงาน ดังนั้นฉันจึงเริ่มเซิร์ฟเวอร์ mysql ผ่าน

mysql.server start

แล้วก็

mysql_secure_installation

เพื่อรักษาความปลอดภัยเซิร์ฟเวอร์และตอนนี้ฉันสามารถเยี่ยมชมเซิร์ฟเวอร์ MySQL ผ่านไฟล์

sudo mysql -uroot -p

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