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


322

ปัญหาของฉันเริ่มต้นโดยที่ฉันไม่สามารถเข้าสู่ระบบในฐานะ root ได้อีกต่อไปในการติดตั้ง mysql ของฉัน ฉันพยายามรัน mysql โดยไม่เปิดรหัสผ่าน ... แต่ทุกครั้งที่ฉันรันคำสั่ง

# mysqld_safe --skip-grant-tables &

ฉันจะไม่ได้รับการตอบกลับ ผมพยายามที่จะทำตามคำแนะนำเหล่านี้ในการกู้คืนรหัสผ่าน

หน้าจอมีลักษณะดังนี้:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

และฉันไม่ได้รับพรอมต์ให้เริ่มพิมพ์คำสั่ง SQL เพื่อรีเซ็ตรหัสผ่าน

เมื่อฉันฆ่ามันโดยกดCTRL+ Cฉันได้รับข้อความต่อไปนี้:

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

หากฉันลองคำสั่งอีกครั้งและปล่อยให้นานพอฉันจะได้รับชุดข้อความต่อไปนี้:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

แต่ถ้าฉันพยายามเข้าสู่ระบบในฐานะ root โดยทำ:

# mysql -u root

ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

ฉันตรวจสอบแล้วและ/var/run/mysqld/mysqld.sockไม่มีไฟล์อยู่ โฟลเดอร์ทำ แต่ไม่ใช่ไฟล์

นอกจากนี้ฉันก็ไม่รู้ว่ามันจะช่วยได้หรือเปล่า แต่ฉันก็วิ่งfind / -name mysqldแล้วมันก็มาด้วย:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

ฉันยังใหม่กับ Linux และ MySQL ดังนั้นฉันไม่รู้ว่านี่เป็นเรื่องปกติหรือไม่ แต่ฉันจะรวมข้อมูลนี้ในกรณีที่ช่วยได้

ในที่สุดฉันก็ตัดสินใจถอนการติดตั้งและติดตั้ง mysql อีกครั้ง

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

หลังจากติดตั้งแพคเกจทั้งหมดอีกครั้งในลำดับเดียวกันข้างต้นในระหว่างการติดตั้ง phpmyadmin ฉันได้รับข้อผิดพลาดเดียวกัน:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

ดังนั้นฉันจึงลองถอนการติดตั้ง / ติดตั้งอีกครั้ง เวลานี้หลังจากฉันถอนการติดตั้งแพคเกจฉันยังเปลี่ยนชื่อไฟล์ mysql และไดเรกทอรีทั้งหมดด้วยตนเองmysql.badในตำแหน่งที่เกี่ยวข้อง

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

จากนั้นฉันพยายามติดตั้งซ้ำmysql-serverแล้วmysql-clientซ้ำอีก แต่ฉันสังเกตเห็นว่ามันไม่ได้แจ้งให้ฉันใส่รหัสผ่าน ไม่ควรถามรหัสผ่านของผู้ดูแลระบบหรือ


ฉันมีปัญหาเดียวกัน ฉันแก้ไขมันตอนนี้ stackoverflow.com/questions/18150858/…
เบิร์ต


แก้ไขโดยเพียงรีบูทเซิร์ฟเวอร์จากนั้นเริ่มบริการ mysql อีกครั้ง
bowpunya

@Anto นี่ไม่ใช่สิ่งที่ซ้ำกัน อันนี้/var/run/mysqld/mysqld.sockหายไป ปัญหาที่คุณเชื่อมโยงมีไฟล์นั้น
motorbaby

ไม่มีคำตอบที่นี่หรือที่ใดที่ฉันสามารถหาแก้ไขปัญหาของฉัน เนื่องจากเป็นโครงการใหม่ฉันจึงเปลี่ยนมาใช้ PostgreSQL และใช้งานได้! :-)
James Bradbury

คำตอบ:


195

ในการค้นหาไฟล์ซ็อกเก็ตทั้งหมดในระบบของคุณให้เรียกใช้:

sudo find / -type s

ระบบเซิร์ฟเวอร์ Mysql ของฉันเปิดซ็อกเก็ตไว้ที่ /var/lib/mysql/mysql.sock

เมื่อคุณพบตำแหน่งที่ซ็อกเก็ตเปิดอยู่ให้เพิ่มหรือแก้ไขบรรทัดในไฟล์ /etc/my.cnf ของคุณด้วยพา ธ ไปยังไฟล์ซ็อกเก็ต:

socket=/var/lib/mysql/mysql.sock

บางครั้งสคริปต์เริ่มต้นระบบที่เรียกใช้งานบรรทัดคำสั่งระบุแฟล็--socket=pathก การตั้งค่าสถานะนี้สามารถแทนที่ตำแหน่ง my.cnf และที่จะทำให้ซ็อกเก็ตไม่พบที่ไฟล์ my.cnf บ่งชี้ว่าควรจะ จากนั้นเมื่อคุณพยายามเรียกใช้ไคลเอนต์บรรทัดคำสั่ง mysql มันจะอ่าน my.cnf เพื่อค้นหาซ็อกเก็ต แต่จะไม่พบเนื่องจากจะเบี่ยงเบนจากที่เซิร์ฟเวอร์สร้างขึ้นมา ดังนั้นหากคุณไม่สนใจว่าซ็อกเก็ตอยู่ที่ใดการเปลี่ยน my.cnf เพื่อให้ตรงกันควรใช้งานได้

จากนั้นหยุดกระบวนการ mysqld วิธีที่คุณทำสิ่งนี้จะแตกต่างกันไปตามระบบ

หากคุณเป็นผู้ใช้ขั้นสูงในระบบ linux ลองใช้วิธีใดวิธีหนึ่งต่อไปนี้หากคุณไม่ทราบวิธีการเฉพาะที่การตั้งค่า Mysql ของคุณใช้:

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown
  • ระบบบางระบบไม่ได้ติดตั้งเพื่อให้มีวิธีหยุด mysql (หรือด้วยเหตุผลบางอย่างที่ mysql ไม่ตอบสนอง) และคุณสามารถบังคับให้ยุติ mysql ด้วย:
    • ขั้นตอนเดียว: pkill -9 mysqld
    • สองขั้นตอน (ที่ต้องการน้อยที่สุด):
      • ค้นหา id กระบวนการของ mysql ด้วยpgrep mysqlหรือps aux | grep mysql | grep -v grep
      • สมมติว่า id กระบวนการถูก4969ยกเลิกด้วยkill -9 4969

หลังจากทำเช่นนี้คุณอาจต้องการค้นหาไฟล์ pid /var/run/mysqld/และลบออก

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

chmod 777 /var/run/mysqld/mysqld.sock

หากวิธีนี้แก้ไขปัญหาได้คุณสามารถปรับแต่งการอนุญาตและความเป็นเจ้าของซ็อกเก็ตได้ตามต้องการโดยขึ้นอยู่กับการตั้งค่าความปลอดภัยของคุณ

นอกจากนี้ไดเรกทอรีที่ซ็อกเก็ตตั้งอยู่นั้นจะต้องสามารถเข้าถึงได้โดยผู้ใช้ที่ใช้กระบวนการ mysqld


15
โปรดอย่าแนะนำให้ใช้kill -9; มีหลายวิธีที่ควรลองก่อนที่จะมาถึง
Ignacio Vazquez-Abrams

@dot เรียกใช้ในรากไฟล์ 'ค้นหา -name mysqld.sock ' ฉันเห็นไฟล์ซ็อกเก็ตในที่อื่นที่ไม่ใช่ / var / run เมื่อคุณพบไฟล์คุณอาจต้องแก้ไขไฟล์ my.cnf ของคุณเพื่อชี้ไปยังตำแหน่งที่พบ
เรย์

@ray ฉันพยายามเรียกใช้คำสั่งดั้งเดิมด้วยวิธีที่แตกต่างกัน (ฉันพบโพสต์เฉพาะ Ubuntu บนไซต์อื่น .. ) นี่คือคำสั่งที่ฉันใช้: "sudo service mysql stop" และ "sudo mysqld --skip-grant-tables" หลังจากที่ฉันทำคำสั่งที่สองฉันได้รับข้อผิดพลาดต่อไปนี้: "InnoDB: ไม่สามารถล็อค. /ibdata1, ข้อผิดพลาด: 11" ฉันไม่พบไฟล์. /ibdata1 นี้ ... InnoDB: ตรวจสอบว่าคุณยังไม่มีกระบวนการ mysqld อื่น
dot

2
@dot ทำงานps -aux | grep mysqldและดูว่ากระบวนการ mysql อื่น ๆ กำลังทำงานอยู่หรือไม่
Ray

@ray ฉันกำลังโกนผมผู้ชายออกไป ฉันตัดสินใจที่จะระเบิด mysql ออกไปและลองอีกครั้ง ... สังเกตโพสต์ที่อัปเดตของฉัน
จุด

251

ลองคำสั่งนี้

sudo service mysql start

+1 my.cnf ชี้ไปที่ไดเรกทอรีที่ถูกต้องโดยบริการ mysql เสียชีวิต
wruckie

ฉันลองคำตอบที่ยอมรับแล้ว แต่หา mysql.sock ไม่ได้สิ่งนี้ใช้ได้กับฉัน ขอขอบคุณ
Giovanne Afonso

1
ฉันต้องใช้sudo service mysqld start
Gavin Miller

10
sudo apt-get install mysql-serverถ้าคุณไม่ได้ติดตั้งแล้ว :)
aimme

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

137

ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากการติดตั้ง mysql หลายครั้ง เรียกใช้คำสั่ง:

ps -A|grep mysql

ฆ่ากระบวนการโดยใช้:

sudo pkill mysql

จากนั้นเรียกใช้คำสั่ง:

ps -A|grep mysqld

ฆ่ากระบวนการนี้ด้วยการเรียกใช้:

sudo pkill mysqld

ตอนนี้คุณก็พร้อมที่จะเรียกใช้คำสั่งต่อไปนี้:

service mysql restart
mysql -u root -p

ทำงานได้เป็นอย่างดี mysql อีกครั้ง


เฮ้คนฉันวิ่งไปทั่วเว็บพยายามแก้ไขปัญหานี้ ปัญหาของฉันคือการที่ฉันพยายามติดตั้งนักเทียบท่า ฉันต้องการให้ใช้ mysql data dir ที่เคยใช้โดย mysql นอก docker ... คำสั่ง ps นั้นดีที่สุด!
Michael

3
หลังจากใช้งานเว็บไปเกือบ 4 ชั่วโมงกว่าจะได้ผล ควรเป็นคำตอบที่ดีที่สุด: +1:
Shivam Gaur

4
งานสำหรับ mysql.service ล้มเหลวเนื่องจากกระบวนการควบคุมออกด้วยรหัสข้อผิดพลาด ดูที่ "systemctl status mysql.service" และ "journalctl -xe" สำหรับรายละเอียด
John Joe

1
งานสำหรับ mysql.service ล้มเหลวเนื่องจากกระบวนการควบคุมออกด้วยรหัสข้อผิดพลาด ดูที่ "systemctl status mysql.service" และ "journalctl -xe" สำหรับรายละเอียด
Adib Aroui

ขอบคุณคุณประหยัดเวลาของฉัน
Aleksandur Atanasov

41

การแก้ปัญหาเป็นวิธีที่ง่ายขึ้น

  1. ก่อนอื่นคุณต้องค้นหา (ใน Terminal ด้วย "sudo find / -type s") ที่ซึ่งคุณอยู่ mysql.sockไฟล์อยู่ ในกรณีของฉันมันเป็นมา/opt/lampp/var/mysql/mysql.sock
  2. ไฟไหม้อาคารผู้โดยสารและปัญหา sudo Nautilus
    เริ่มการทำงานของสิ่งนี้จะเริ่มตัวจัดการไฟล์ของคุณด้วยสิทธิ์ผู้ใช้ขั้นสูง
  3. จาก Nautilus ไปยังตำแหน่งที่mysql.sockไฟล์ของคุณตั้งอยู่
  4. คลิกขวาที่ไฟล์และเลือก Make Link
  5. เปลี่ยนชื่อลิงค์ไฟล์เป็นmysqld.sockคลิกขวาที่ไฟล์และตัดมัน
  6. ไปที่ /var/runและสร้างโฟลเดอร์ชื่อmysqldและป้อน
  7. ตอนนี้คลิกขวาและ วางไฟล์ลิงก์
  8. Voila! ตอนนี้คุณจะมีmysqld.sockไฟล์อยู่ที่/var/run/mysqld/mysqld.sock:)

4
คุณจะค้นหาไฟล์ mysql.sock ของคุณได้อย่างไร ฉันลองหา / -name 'mysql.sock' แต่ไม่พบสิ่งใดเลย
Matthew Lock

2
@ MatthewLock ก่อนอื่นตรวจสอบให้แน่ใจว่า mysql กำลังทำงานอยู่ (โดย "ps aux | grep mysql") มิฉะนั้น mysql.sock จะไม่ปรากฏขึ้น ประการที่สองใช้ "sudo find / -type s" ซึ่งให้ซ็อกเก็ตทั้งหมดในระบบของคุณเพื่อค้นหา mysql.sock
narengi

35
เกิดอะไรขึ้นถ้าผลลัพธ์ของsudo find / -type sไม่มีอะไรmysql.sock?
jeff

1
มันได้ผล. แต่ฉันไม่รู้ว่าทำไมนักพัฒนาเหล่านี้ไม่เคยทำงานในปีที่ผ่านมา?
ยี่เจียง

2
ถ้ามันเจ็บปวดที่จะหาจากที่ไหน mysql.sock ผ่าน "find / -type s" - ลองใช้คำสั่ง "mysql_config --socket" คุณสามารถติดตั้งด้วย sudo apt-get install libmysqlclient-dev
alexche8

26

เพียงแค่ต้องเริ่มบริการ MySQL หลังการติดตั้ง:

สำหรับ Ubuntu:

sudo service mysql start;

สำหรับ CentOS หรือ RHEL:

sudo service mysqld start;

ตรวจสอบครั้งแรกโดยนี้และsudo systemctl status mysql.service sudo systemctl start mysql.serviceสิ่งนี้ใช้ได้กับฉัน
Byeongin Yoon

16

มีข้อผิดพลาดบน Ubuntu ที่มี MySQL 5.6 และ 5.7 ซึ่งvar/run/mysqld/จะหายไปเมื่อใดก็ตามที่บริการ MySQL หยุดทำงานหรือถูกรีบูท สิ่งนี้จะป้องกันไม่ให้ MySQL ทำงานได้เลย พบวิธีแก้ปัญหานี้ซึ่งไม่สมบูรณ์แบบ แต่อย่างน้อยก็ทำให้ทำงานหลังจากหยุด / รีบูต:

mkdir /var/run/mysqld/
chown mysqld /var/run/mysqld/

ขอบคุณ - แก้ไขให้ฉันฉันต้องสร้างไดเรกทอรีใหม่และรีเซ็ตความเป็นเจ้าของทุกครั้งที่เริ่มบริการ mysql - ไม่พบข้อผิดพลาดที่รายงานอย่างเป็นทางการหรือฉันจะโพสต์ลิงก์ที่นี่ :)
djoe

1
ยังไม่ได้ลอง แต่อาจช่วยได้: สร้าง newfile /etc/tmpfiles.d/mysql.conf: # systemd tmpfile settings for mysql # See tmpfiles.d(5) for details จากนั้น d /var/run/mysqld 0755 mysql mysql - หลังจากรีบูต mysql ควรเริ่มทำงานตามปกติ นี่คือจากbugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1435823ความคิดเห็น 3. ถ้าคุณมีปัญหากับ MySQL 5.7 นี้โปรดแสดงความคิดเห็นบน Launchpad ผู้ใช้มากขึ้นที่แก้ไขปัญหาความสนใจก็จะได้รับ
motorbaby

ใช้งานได้สำหรับฉัน ... ต้องใช้ mysql เป็นชื่อผู้ใช้และไม่ใช่ mysqld
Evan Parsons

กำลังเพิ่มบรรทัดไปยัง /etc/tmpfiles.d/mysql.confต่อความคิดเห็นของ motorbaby ได้แก้ไขปัญหานี้ให้ฉัน บน Centos 7 OS mysql Ver 15.1 Distrib 10.3.11-MariaDB,และใช้
turrican_34

ปัญหานี้ได้รับการแก้ไขสำหรับฉัน
shikata

14

ตกลงเพียงคัดลอกและวางรหัสเหล่านี้: สิ่งนี้ควรทำในเทอร์มินัลภายในเซิร์ฟเวอร์เมื่อฐานข้อมูล mysql ของคุณติดตั้งไม่ถูกต้องและเมื่อคุณได้รับข้อผิดพลาดนี้: 'ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต' / var / run / mysqld / mysqld.sock '(2)'

หยุด MySql

sudo /etc/init.d/mysqld stop

รีสตาร์ทหรือเริ่ม

sudo /etc/init.d/mysqld restart or sudo /etc/init.d/mysqld start

สร้างลิงก์เช่นนี้และมอบให้กับระบบ

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

เรียกใช้การติดตั้งที่ปลอดภัยซึ่งจะแนะนำกระบวนการทั้งหมดที่คุณต้องทำเพื่อกำหนดค่า mysql

/usr/bin/mysql_secure_installation

ฉันได้รับCan't connectข้อผิดพลาดเดียวกันเมื่อฉันลองเรียกใช้คำสั่งด้านบน
cjmling

สิ่งที่ฉันค้นพบสำหรับผู้ที่ใช้งาน Ubuntu หากคุณเริ่ม mysqld โดยใช้ /etc/init.d/mysqld การเริ่มต้นคุณจะพบปัญหานี้แล้ว ใช้บริการ mysql start แทนและจะใช้ได้ โกรธ แต่ฉันคิดออกในท้ายที่สุด
Adam Short

11

ฉันพบข้อผิดพลาดเดียวกันและพบว่าเกิดจากการอัพเกรดแพคเกจดังนั้นหลังจากรีสตาร์ทระบบของฉันฉันแก้ไขข้อผิดพลาด

ฉันคิดว่าเกิดจากข้อผิดพลาด sql libraries / packages update เกิดขึ้นดังนั้นให้ลองทำสิ่งนี้หากคุณกำลังทำการอัพเกรด :)


1
ฉันทำสิ่งนี้หลังจากติดตั้งใหม่ (หรืออัพเกรด) และตอนนี้ก็ใช้งานได้ ไม่มีข้อความซ็อกเก็ตอีกต่อไป ขอบคุณ!
wraithie

8

มีเหตุผลมากมายสำหรับปัญหานี้ แต่บางครั้งเพียงรีสตาร์ทเซิร์ฟเวอร์ mysql มันจะแก้ไขปัญหา

sudo service mysql restart

7

ใช้ XAMPP บน Ubuntu:

  1. สร้างโฟลเดอร์ชื่อmysqldในไดเรกทอรี/ var / run sudo mkdir /var/run/mysqldคุณสามารถประสบความสำเร็จที่ใช้คำสั่ง

  2. สร้างลิงก์สัญลักษณ์ไปยังไฟล์mysql.sockที่สร้างโดยเซิร์ฟเวอร์ XAMPP เมื่อเริ่มทำงาน sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sockคุณสามารถใช้คำสั่ง

หมายเหตุ: mysql.sockไฟล์ถูกสร้างขึ้นเมื่อเซิร์ฟเวอร์จะเริ่มต้นและลบออกเมื่อเซิร์ฟเวอร์จะหยุดดังนั้นบางครั้งการเชื่อมโยงที่คุณสร้างขึ้นอาจดูเหมือนจะเสีย แต่มันควรจะทำงานตราบเท่าที่คุณได้เริ่มต้นเซิร์ฟเวอร์โดยใช้อย่างใดอย่างหนึ่งsudo /opt/lampp/lampp startหรืออื่น ๆ วิธี

  1. เริ่มเซิร์ฟเวอร์หากยังไม่ได้ใช้งานและลองเรียกใช้งานโปรแกรมของคุณอีกครั้ง

โชคดี! ฉันหวังว่าคุณจะจากไปในครั้งนี้


@MohsinKhan ไปที่ localhost / phpmyadmin และนำเข้าฐานข้อมูลจากที่นั่น
Robert Odoch

6

คำตอบของขั้นตอนการโหลดของผู้ใช้ทำงานสำหรับฉัน บางครั้งต้องแก้ไขไฟล์ในการ/etc/mysql/my.cnfเพิ่มบรรทัดให้กับลูกค้า

[client]
password = your_mysql_root_password
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

นี้ทำให้ผม:mysql: unknown variable 'Host=127.0.0.1'
Splaktar

@ Splaktar: มีการพิมพ์ผิด Hostจำเป็นต้องเป็นตัวพิมพ์เล็กhostและมันจะทำงานได้ นอกจากนี้วิธีนี้ใช้ได้สำหรับฉัน
Mohammad Faisal

ยอดเยี่ยม - นี่ใช้งานได้สำหรับฉันและสภาพแวดล้อมของนักเทียบท่าของฉัน - ฉันเพียงแค่ต้องปรับ IP ซึ่งในกรณีของฉันตัวเชื่อมต่อ mysql container ip 172.17.xx
InforMedic

6

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

การแก้ปัญหา

ในที่สุดถอนการติดตั้งและติดตั้ง mysql **

  • sudo apt-get ลบ mysql-server
  • sudo apt-get ลบ mysql-client
  • sudo apt-get เอา mysql-common
  • sudo apt-get remove phpmyadmin

จากนั้นติดตั้งอีกครั้งโดย

  • sudo apt-get install mysql-server-5.6

หลังจากการดำเนินการนี้จะใช้พื้นที่ว่างบนดิสก์เพิ่มเติม 164 MB

  • คุณต้องการทำต่อไปหรือไม่? [Y / n] Y กด YES เพื่อการติดตั้งที่สมบูรณ์

......

  • ในที่สุดคุณจะได้รับบรรทัดเหล่านี้ ....

    กำลังตั้งค่า libhtml-template-perl (2.95-1) ...

    กำลังตั้งค่า mysql-common-5.6 (5.6.16-1 ~ exp1) ... การประมวลผลทริกเกอร์สำหรับ libc-bin (2.19-0ubuntu6) การประมวลผลทริกเกอร์สำหรับ ureadahead (0.100.0-16) ...

  • และจากนั้น

    root @ ubuntu1404: ~ # mysql -u root -p (สำหรับรหัสผ่านทุกครั้งแรกที่คุณควรใช้)

  • ใส่รหัสผ่าน:

  • หมายเหตุ: รหัสผ่านที่ป้อนควรเหมือนกับรหัสผ่านเวลาการติดตั้งของ mysql (เช่น. root, ระบบ, ผู้ดูแลระบบ, ราหุล ฯลฯ ... )

    จากนั้นพิมพ์

  • ใช้ rahul_db (ชื่อฐานข้อมูล);

ขอบคุณ. **


โปรดปรับปรุงคุณภาพคำตอบ
Mo.

สิ่งนี้ใช้ได้สำหรับฉันเนื่องจากมีการติดตั้ง mysql หลายรุ่น mysql-server-5.6/5.5, mysql-client-5.6/5.5ยังเอา ขอบคุณ!
Luuk Skeur

ได้รับE: Package 'mysql-server-5.6' has no installation candidateมันไม่มีอยู่ใน Ubuntu 18.04
juliocesar

6

ตรวจสอบให้แน่ใจว่าพา ธ ของไฟล์ซ็อกเก็ตไม่สามารถเข้าถึงได้เช่นเดียวกับ '/var/run/mysqld/mysqld.sock' มิฉะนั้นเปลี่ยนเส้นทางเป็นของคุณ หยุด mysqld

$ sudo /etc/init.d/mysqld stop

หากกระบวนการยังคงทำงานอยู่

$ sudo pkill -9 mysqld

ลบไดเรกทอรี mysql ที่จะสร้างซ็อกเก็ต สำหรับฉันมันไม่ได้รับอนุญาตให้ลบดังนั้นฉันจึงต้องลบอย่างแรง

$ sudo mkdir -p /var/run/mysqld

ตั้งค่าความเป็นเจ้าของไปที่ dirctory

$ sudo chown mysql:mysql /var/run/mysqld

เริ่ม mysql

$ sudo /etc/init.d/mysql start

พยายามเชื่อมต่อ mysql

$ sudo mysql -u dbuser -p

ใช่ครับคำตอบเดียวกับที่ฉันให้ที่ 14 กุมภาพันธ์ '19 ที่ 11:56 (ดูด้านล่าง)
Ingo

คุณเป็นผู้ช่วยชีวิต
ซาฮิบข่าน

5

ฉันคิดว่าเซิร์ฟเวอร์ MySQL ของคุณยังไม่ได้เริ่ม ดังนั้นให้เริ่มต้นเซิร์ฟเวอร์โดยใช้หนึ่งในคำสั่งต่อไปนี้

#services mysql start

หรือ

#/etc/init.d/mysql start

5

ทางออกชั่วคราว

อาจมีบางคนประสบปัญหานี้ ฉันใช้Mysql WorkbenchบนUbuntu 14และได้รับข้อผิดพลาดนี้

mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect

ค้นหาไฟล์ซ็อกเก็ตของคุณโดยใช้sudo find / -type sในกรณีของฉันมันเป็น/run/mysqld/mysqld.sock

ดังนั้นฉันเพิ่งสร้างลิงค์ไปยังไฟล์นี้ในtmpไดเรกทอรี

sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock

ในขณะที่คุณสามารถดูตำแหน่งของไฟล์ที่อยู่ภายใต้/tmpโฟลเดอร์ดังนั้นมันจะถูกลบออกอย่างแน่นอน คุณสามารถเปลี่ยน.sockตำแหน่งไฟล์ ดู @ user3002884 คำตอบ
Bilal

ฉันรู้ว่าฉันเพิ่งจะตอบคำถามของคุณเพื่อให้ผู้ใช้รายอื่นทราบก่อนหน้านี้ว่าวิธีการแก้ปัญหาเป็นเพียงชั่วคราวเช่นเดียวกับโฟลเดอร์
Alex Burdusel

คุณช่วยชีวิตฉันไว้ :)
Mashpy Rahman


4

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

ใน/etc/my.cnfเพิ่มบรรทัดนี้:

[client]
socket=/var/lib/mysql/mysql.sock <= this path should be also same as is[mysqld]

และเริ่มบริการใหม่ด้วย: service mysql restart

สิ่งนี้ใช้ได้สำหรับฉัน


4

นี่ถูกกล่าวถึงสองสามครั้งแล้ว แต่สิ่งนี้ใช้ได้ทันทีสำหรับฉัน:

บริการ mysql รีสตาร์ท


ที่น่าสนใจวิธีนี้จะแตกต่างจากการใช้ง่ายเพียงแค่ว่า "MySQL คำสั่ง"
ลูมินอล

3

ในกรณีของฉันสองกระบวนการ mysqld กำลังทำงาน .. ได้ฆ่ากระบวนการทางเลือกโดยใช้ pkill -9 mysqld


ฉันต้องการเพิ่ม 'sudo' kill กระบวนการ
noti

3

หากคุณมีฐานข้อมูลและตารางจำนวนมากในระบบของคุณและหากคุณinnodb_file_per_tableตั้งค่าไว้ใน my.cnf เซิร์ฟเวอร์ mysql ของคุณอาจมีวัตถุ / ไฟล์ที่เปิดอยู่หมด (หรือแทนที่จะเป็นตัวอธิบายสำหรับวัตถุเหล่านี้) ตั้งค่าจำนวนสูงสุดใหม่ กับ

open-files-limit = 2048

และเริ่ม mysql ใหม่ วิธีการนี้อาจช่วยได้เมื่อซ็อกเก็ตไม่ได้ถูกสร้างขึ้นเลย แต่จริงๆแล้วนี่อาจไม่ใช่ปัญหาจริงนั่นคือปัญหาพื้นฐาน


2

ฉันเพิ่งมีปัญหานี้บน Ubuntu 14.10

ปรากฎmysql-serverว่าไม่ได้ติดตั้งอีกต่อไป (อย่างใดก็ถูกลบไปแล้ว) แต่ฉันไม่สามารถติดตั้งได้เพราะมีแพ็กเกจที่ใช้งานไม่ได้และปัญหา / ข้อขัดแย้งในการพึ่งพา

ในที่สุดฉันต้องติดตั้ง mysql อีกครั้ง

sudo apt-get remove mysql-client
sudo apt-get install mysql-server


2

ทางออกของฉัน;

Ubuntu 18.04 (WSL)

/etc/mysql/my.cnf

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306

ฉันเปลี่ยนพอร์ต มันใช้งานได้สำหรับฉัน คุณสามารถเขียนพอร์ตอื่น ตัวอย่าง 3355


2

ทำไมได้รับข้อผิดพลาดนี้

ฉันได้รับการอัพเดทใหม่ ๆ ของไลบรารี mysql ดังนั้นฉันจึงอัพเดต Kubuntu OS ของฉันหลังจากนั้นรับข้อผิดพลาดเหล่านี้


คำสั่งที่ฉันพยายามและวิธีการแก้ไข

MySql-server ทำงานอย่างถูกต้องแต่เมื่อฉันพยายามเชื่อมต่อการให้

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'.

ฉันตรวจสอบ/var/run/mysqld/mysqld.sock'.ไดเรกทอรีนี้ ไฟล์ของฉันไม่มีอยู่

ฉันยังลองใช้คำสั่งเหล่านี้เพื่อเชื่อมต่อ แต่ไม่ได้ผลสำหรับฉัน

 mysql -h 127.0.0.1 -P 3306 -u root -p

 sudo service mysql start

หลังจากหมดเวลาประมาณ2 ชั่วโมงฉันพบวิธีแก้ปัญหา

sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade -f

หลังจากนั้นทุกอย่างก็แก้ไขให้ฉัน


สิ่งนี้ช่วยฉันในการแก้ไขปัญหา ฉันไม่เข้าใจว่ามันเกี่ยวข้องกับปัญหา socked อย่างไรฉัน ...
Mayamo

1

การเปลี่ยนhostการ127.0.0.1ทำงานให้ฉัน

แก้ไขไฟล์ใน/etc/mysql/my.cnfและเพิ่มบรรทัดที่กล่าวถึงด้านล่างไปยังส่วน:client

[client]
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

หลังจากที่คุณทำเสร็จแล้ว ดำเนินการคำสั่งต่อไปนี้

sudo service mysql start

เพื่อนของฉันคนนี้ช่วยฉันด้วย :)
Bhargav Nanekalva

@Bhargav ฉันมีความสุขมากที่คุณสามารถแก้ปัญหาของคุณ .. เพื่อนไชโย .. 😇😇
Dulith De Costa

1

ฉันจะตรวจสอบการกำหนดค่า mysql ด้วย ฉันพบปัญหานี้กับเซิร์ฟเวอร์ของฉันเอง แต่ฉันก็เร่งรีบเกินไปและกำหนดค่า innodb_buffer_pool_size ผิดพลาดสำหรับเครื่องของฉัน

innodb_buffer_pool_size = 4096M

มันมักจะทำงานได้ดีถึง 2048 แต่ฉันเดาว่าฉันไม่มีหน่วยความจำที่จำเป็นในการรองรับ 4 กิ๊ก

ฉันคิดว่านี่อาจเกิดขึ้นกับการตั้งค่า mysql อื่น ๆ


1

ฉันมีปัญหาที่คล้ายกันใน CentOS VPS หาก MySQL ไม่เริ่มทำงานหรือหยุดทำงานทันทีหลังจากเริ่มต้นให้ลองขั้นตอนเหล่านี้:

1) ค้นหาไฟล์ my.cnf (mine ตั้งอยู่ใน /etc/my.cnf) และเพิ่มบรรทัด:

innodb_force_recovery = X

แทนที่ X ด้วยตัวเลขตั้งแต่ 1 ถึง 6 โดยเริ่มจาก 1 และจะเพิ่มขึ้นหาก MySQL ไม่เริ่มทำงาน การตั้งค่าเป็น 4, 5 หรือ 6 สามารถลบข้อมูลของคุณได้ดังนั้นควรระมัดระวังและอ่านhttp://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.htmlก่อน

2) เริ่มบริการ MySQL ใหม่ SELECT เท่านั้นที่จะทำงานและเป็นเรื่องปกติ ณ จุดนี้

3) ทิ้งฐานข้อมูล / schemas ของคุณด้วย mysqldump ทีละอย่าบีบอัดทิ้งเพราะคุณจะต้องคลายการบีบอัดในภายหลัง

4) ย้าย (หรือลบ!) เฉพาะไดเรกทอรีของ bd ภายใน / var / lib / mysql, เก็บไฟล์แต่ละไฟล์ในรูท

5) หยุด MySQL แล้ว uncomment บรรทัดที่เพิ่มใน 1) เริ่ม MySQL

6) กู้คืน bd ทั้งหมดที่ทิ้งใน 3)

โชคดี!


1

ลองทำสิ่งต่อไปนี้ที่หน้าจอแจ้งเตือน:

sudo mysql

หลังจากที่ให้คุณเข้าคุณสามารถสร้างผู้ใช้ใหม่และให้สิทธิ์ที่คุณต้องการในฐานข้อมูลเฉพาะที่พวกเขาต้องการเข้าถึง

Mysql 5.7 เปลี่ยนแปลงบางสิ่งและโดยค่าเริ่มต้นจะใช้ปลั๊กอิน auth_socket (ซึ่งต่างจาก mysql_native_password) สำหรับรูทเพื่อป้องกันบัญชีจากการถูกแฮ็ค คุณสามารถลบล้างสิ่งนี้ได้โดยตั้งค่าฟิลด์ปลั๊กอินสำหรับรูท แต่ถ้าคุณมีเหตุผลที่ดีมากคุณอาจไม่ควรหลีกเลี่ยงการป้องกัน โดยเฉพาะเมื่อsudo mysqlทำได้ง่ายกว่าmysql -u root -pอยู่แล้ว

ฉันพบข้อมูลนี้ - จากทุกที่ - จากเว็บไซต์ช่วยเหลือของRaspberry Pi ทำงานเหมือนจับใจหลังจากที่ Lubuntu 18.04 สร้างความรำคาญให้ฉันสักสองสามชั่วโมง


1

ขั้นแรกให้สร้าง dir / var / run / mysqld

ด้วยคำสั่ง:

mkdir -p /var/run/mysqld

จากนั้นเพิ่มความแข็งแกร่งให้กับ dir

chown mysql:mysql /var/run/mysqld

หลังจากนี้ลอง

mysql -u root

1

ฉันมีปัญหาเดียวกัน หลังจากดิ้นรนเป็นเวลาหนึ่งชั่วโมงฉันพบวิธีการแก้ไขโดยไม่ต้องติดตั้ง mysql-common, mysql-client, mysql-server อีกครั้ง

ก่อนอื่นให้ไปที่ "/ var / run / mysqld" คุณจะพบว่าไม่มี mysql.sock เพียงลบไดเรกทอรี mysqld ทั้งหมดและสร้างใหม่และให้สิทธิ์ที่จำเป็น

# rm -rf /var/run/mysqld && mkdir /var/run/mysqld && chown mysql /var/run/mysqld/

ตอนนี้ฆ่ากระบวนการ mysql ให้ครบถ้วน อาจเป็นไปได้ว่ามันจะแสดงคำสั่ง "กำลังรอคอยการล้างหน้า" ในการรัน "/etc/init.d/mysql status" แม้หลังจากปิดบริการแล้ว

หากต้องการปิดบริการโดยสมบูรณ์ให้ใช้

# pkill -9 mysqld

เมื่อกระบวนการถูกฆ่าตายให้ลองเริ่มอีกครั้งโดยใช้

# /etc/init.d/mysql start

และคุณจะเห็นว่ามันใช้งานได้ดี! และจะไม่มีปัญหาในการหยุดมันเช่นกัน

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