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


255

ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันพยายามเชื่อมต่อกับ mysql:

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

มีวิธีแก้ไขข้อผิดพลาดนี้หรือไม่? อะไรคือเหตุผลเบื้องหลัง


ฉันได้ตอบคำถามนี้ที่นี่โปรดตรวจสอบลิงค์ด้านล่าง: stackoverflow.com/a/35577309/4773290
Pratik Patil

คำตอบ:


222

คุณกำลังเชื่อมต่อกับ "localhost" หรือ "127.0.0.1" หรือไม่? ฉันสังเกตเห็นว่าเมื่อคุณเชื่อมต่อกับ "localhost" ตัวเชื่อมต่อซ็อกเก็ตถูกใช้ แต่เมื่อคุณเชื่อมต่อกับ "127.0.0.1" ตัวเชื่อมต่อ TCP / IP จะถูกใช้ คุณสามารถลองใช้ "127.0.0.1" หากไม่ได้เปิดใช้งานตัวเชื่อมต่อซ็อกเก็ต / ทำงาน


27
ในกรณีนี้คุณควรตรวจสอบว่าเซิร์ฟเวอร์ MYSQL ของคุณทำงานอยู่หรือไม่
Jan Thomä

3
นอกจากนี้คุณยังสามารถบังคับใช้ซ็อกเก็ตที่มีพารามิเตอร์ซ็อกเก็ต (-S กับ / usr / bin / mysql) และบังคับให้ TCP / IP โดยระบุพอร์ต (-P พร้อม / usr / bin / mysql)
Kaoru

การใช้ชื่อเครือข่ายที่ผ่านการรับรองโดยสมบูรณ์นอกเหนือจาก localhost นั้นเหมาะกับฉัน เพียงตรวจสอบให้แน่ใจว่ามีการประกาศในไฟล์ 'โฮสต์' ของไคลเอ็นต์
Fabien Haddadi

2
หมายเหตุสำหรับผู้ใช้ cygwin: ถ้าไคลเอนต์ cygwin mysql พยายามเชื่อมต่อกับเซิร์ฟเวอร์ WAMP mysql ในพื้นที่ให้ใช้ -h <hostname อื่นที่ไม่ใช่ localhost> อย่าพยายามสร้างไฟล์ mysql.sock และประกาศในไฟล์ my.cnf ใด ๆ มันจะไม่ทำงาน
Fabien Haddadi

ชื่อโฮสต์ผิดให้ฉันข้อผิดพลาดเดียวกันแน่นอน มองไปที่/etc/hostsไฟล์ในภาชนะนักเทียบท่าของฉันแสดงให้ฉันเห็นชื่อโฮสต์ MySql mysqlที่จะ การใช้ชื่อโฮสต์เดียวกันนี้ในการกำหนดค่าการเชื่อมต่อของฉันสามารถแก้ไขปัญหาได้
Stephane

188

ตรวจสอบให้แน่ใจว่าบริการ mysql ของคุณกำลังทำงาน

service mysqld start

จากนั้นลองใช้วิธีใดวิธีหนึ่งดังต่อไปนี้:

(ถ้าคุณยังไม่ได้ตั้งรหัสผ่านสำหรับ mysql)

mysql -u root

หากคุณได้ตั้งรหัสผ่านแล้ว

mysql -u root -p

5
ในการเผยแพร่เดเบียนรุ่นใหม่: service mariadb startเพราะmariadb.org/debian-9-released-mariadb-mysql-variant
Zahra

2
ให้เหรียญแก่เจ้านั่น
Siraj Alam

นี่คือคำตอบสำหรับฉัน ตั้งแต่ฉันใช้ mariadb วิธีแก้ปัญหาคือให้เรียกใช้สิ่งต่อไปนี้: "sudo systemctl start mariadb" ทั้งหมดเป็นอย่างดีหลังจากนั้น
mohsen

มอบเหรียญ @Zahra
Ahmed C

28

หากไฟล์ของคุณ my.cnf (โดยปกติในโฟลเดอร์ etc) ได้รับการกำหนดค่าอย่างถูกต้องด้วย

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

คุณสามารถตรวจสอบว่า mysql ทำงานด้วยคำสั่งต่อไปนี้:

mysqladmin -u root -p status

ลองเปลี่ยนสิทธิ์ของคุณเป็นโฟลเดอร์ mysql หากคุณทำงานในพื้นที่คุณสามารถลอง:

sudo chmod -R 777 /var/lib/mysql/

ที่แก้ไขมันสำหรับฉัน


มันใช้งานได้สำหรับฉันด้วย แต่หลังจากฉันอัพเกรดเป็นเวอร์ชั่นล่าสุดแล้วก็พบปัญหานี้ฉันจะทราบได้ไหมว่าทำไมสิ่งนี้ถึงเกิดขึ้น
Ben

sudo chmod -R 777 / var / lib / mysql / ทำงานให้ฉันด้วยปัญหาที่ฉันมีในการเริ่มต้นนักเทียบท่าคอนเทนเนอร์ mysql
user3152459

23

เซิร์ฟเวอร์ MySQL ไม่ทำงานหรือไม่ใช่ตำแหน่งของไฟล์ซ็อกเก็ต (ตรวจสอบ my.cnf)


ฉันมีปัญหาที่อธิบายไว้ข้างต้นและนี่คือปัญหา ขอบคุณ
oshirowanen

3
จะใช้สำหรับการติดตั้ง Homebrew ที่ไหน
pal4life

19

ส่วนใหญ่mysql.sockไม่มีอยู่ใน/var/lib/mysql/ไม่อยู่ใน

หากคุณพบไฟล์เดียวกันในตำแหน่งอื่นให้ทำการเชื่อมโยง:

ตัวอย่างเช่น: ฉันมี /data/mysql_datadir/mysql.sock

สลับผู้ใช้เป็น MySQL และดำเนินการตามที่กล่าวไว้ด้านล่าง:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

นั่นช่วยแก้ไขปัญหาของฉัน


เปลี่ยนชื่อ mysql.sock เป็นอย่างอื่นจากนั้นเริ่ม mysqld ("บริการ mysqld เริ่มต้นใหม่") จากนั้นเปลี่ยนชื่ออย่างอื่นเป็น mysql.sock ที่ทำงานให้ฉัน ความแตกต่างเล็กน้อยในคำตอบนี้ขอบคุณมาก
วิเคราะห์ฟัซซี

คำตอบนี้อาจช่วยระบุตำแหน่งmysql.sockไฟล์
Nobita

15

หากคุณอยู่ใน RHEL ล่าสุดคุณอาจต้องเริ่ม mariadb (โอเพ่นซอร์ส mysql db) แทน mysql db:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

จากนั้นคุณควรจะสามารถเข้าถึง mysql ได้ตามปกติ:

mysql -u root -p

FYI ใช้งานได้กับ CentOS 8.1 เช่นกัน หลังจากที่ติดตั้งmariadb-serverและmariadbไม่ลืมที่จะเรียกใช้mysql_secure_installationในการทำความสะอาดการตั้งค่าที่ไม่ปลอดภัยบางส่วนเริ่มต้น
Dio Phung

13

ในกรณีของฉันฉันได้ย้ายไฟล์ซ็อกเก็ตไปยังตำแหน่งอื่นภายใน/etc/my.cnf จาก/var/lib/mysql/mysql.sockไปยัง/tmp/mysql.sock

แม้หลังจากเริ่มบริการ mysqld ฉันก็ยังเห็นข้อความแสดงข้อผิดพลาดเมื่อฉันพยายามเชื่อมต่อ ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

ปัญหาเกิดจากวิธีการกำหนดค่าไคลเอนต์ การรันการวินิจฉัยจะแสดงเส้นทางซ็อกเก็ตที่ถูกต้อง เช่นps aux | grep mysqld

ผลงาน:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

ไม่ทำงาน, ไม่เป็นผล:

mysql -uroot -p
mysql -uroot -p -hlocalhost

คุณสามารถแก้ไขปัญหานี้ได้โดยการเพิ่มบรรทัดซ็อกเก็ตเดียวกันภายใต้[client]ส่วนภายใน mysql config


13

เพียงแก้ไข/etc/my.cnf เพิ่มบรรทัดต่อไปนี้ลงในmy.cnf

[mysqld]

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

[client]

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

รีสตาร์ท mysql และเชื่อมต่ออีกครั้ง

ผู้ใช้ mysql -u ฐานข้อมูลรหัสผ่าน -p โฮสต์ -h;


คำตอบที่ถูกต้องเท่านั้น ฉันสงสัยว่าทำไมคะแนนโหวตไม่เพียงพอ
CentAu

11

ตรวจสอบว่าบริการ mysqld ของคุณกำลังทำงานอยู่หรือไม่หากไม่ได้ทำงานให้เริ่มบริการ

หากปัญหาของคุณไม่ได้แก้ไขให้มองหาและแก้ไขดังต่อไปนี้ที่คุณเห็นเส้นที่เริ่มต้นด้วย/etc/my.cnf socketทำการสำรองไฟล์นั้นก่อนที่จะทำการอัพเดทนี้

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

เปลี่ยนไป

socket=/opt/lampp/var/mysql/mysql.sock -u root

1
สวัสดี Sekar ฉันป้อน "find / -name my.cnf" และฉันมีที่ตั้งสองแห่ง 1) /opt/lampp/etc/my.cnf 2) /opc/mysql/my.cnf ดังนั้นอัน
ไหน

7

MariaDB ซึ่งเป็นชุมชนที่ได้รับการพัฒนาของ MySQL ได้กลายเป็นการนำ MySQL มาใช้ในหลาย ๆ รูปแบบ

ดังนั้นก่อนอื่นคุณควรเริ่ม

$ sudo systemctl start mariadb

หากล้มเหลวแทนที่จะลอง

$ sudo systemctl start mysqld

จากนั้นเริ่ม mysql

$ mysql -u root -p

ณ วันนี้ใน Fedora แพ็คเกจชื่อmariadb และใน Ubuntu มันถูกเรียกว่าmariadb-serverและในอูบุนตูจะเรียกว่า

ดังนั้นคุณอาจต้องติดตั้งหากยังไม่ได้ติดตั้งในระบบของคุณ


7

ตรวจสอบให้แน่ใจว่าคุณมีพื้นที่เหลือเพียงพอ /varให้แน่ใจว่าคุณมีพื้นที่เพียงพอที่เหลืออยู่ในหาก Mysql อสูรไม่สามารถเขียนข้อมูลเพิ่มเติมไปยังไดรฟ์เซิร์ฟเวอร์ mysql จะไม่เริ่มทำงานและนำไปสู่ข้อผิดพลาดCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

พิจารณาใช้

expire_logs_days = 10
max_binlog_size = 100M

สิ่งนี้จะช่วยให้คุณลดการใช้งานดิสก์


ขอบคุณฉันใช้ mysql บน oracle virtualbox และเมื่อฉันทำการถ่ายโอนข้อมูล bd ของฉันฉันมีพื้นที่เหลืออยู่และไม่สามารถเริ่มเซิร์ฟเวอร์ mysql ได้เมื่อฉันลบไฟล์การถ่ายโอนข้อมูลฉันสามารถรีสตาร์ทเซิร์ฟเวอร์ mysql ได้
JayCee

1
วิธีนี้แก้ไขได้สำหรับฉัน ฉันได้ตั้งค่า innodb_buffer_pool_size เป็นค่าที่สูงมากสำหรับสภาพแวดล้อมการผลิตและทำให้ mysql crash บนเครื่องเสมือนของฉัน
Benjamin Brizzi

1
ฉันมีปัญหานี้เมื่อใช้phabricatorและการแก้ปัญหาคือการเปลี่ยนแปลงในinnodb_buffer_pool_size my.cnfการตั้งค่าให้มีค่าเล็กน้อยเช่นinnodb_buffer_pool_size = 50Mเป็นการทดสอบที่ดีที่จะทิ้งสมมติฐานนี้)
Yercalamarino

นั่นคือปัญหาที่เลวร้ายตรวจสอบทุกอย่างยกเว้นพื้นที่ดิสก์ เพิ่มพื้นที่ว่างจาก / var มันกลับมาแล้ว!
Nadjib Mami



4

ตรวจสอบให้แน่ใจว่าคุณเริ่มเซิร์ฟเวอร์:

mysql.server start

จากนั้นเชื่อมต่อกับผู้ใช้รูท:

mysql -uroot

3

หาก mysql ของคุณใช้งานได้ก่อนหน้านี้และหยุดกึกเพียงแค่ "รีบูต" เซิร์ฟเวอร์

พบปัญหานี้ใน CentOS VPS .- ของฉันหรือไม่

ได้รับอย่างต่อเนื่อง

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

พยายามใช้เทคนิคทั้งหมดในที่สุดการรีสตาร์ทเซิร์ฟเวอร์จะแก้ไขปัญหา ->

shutdown -r now

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



3

หากคุณเปลี่ยนไฟล์ใน / var / lib / mysql [เช่นคัดลอกหรือแทนที่] คุณต้องตั้งค่าเจ้าของไฟล์เป็น mysql สิ่งนี้สำคัญมากถ้า mariadb.service รีสตาร์ทล้มเหลว

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *


2

ก่อนอื่นให้ป้อน "service mysqld start" และเข้าสู่ระบบ


คุณต้องการจะพูดอะไร? โปรดอ่านคำถามที่พบบ่อยก่อนถามคำถามที่นี่
Freak

คำถามนี้ตอบได้สำเร็จเมื่อสามปีที่แล้ว คำตอบที่แน่นอนนี้ได้รับอย่างสมบูรณ์มากขึ้นเมื่อปีที่แล้ว
Cairnarvon

2

โปรดตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งเซิร์ฟเวอร์ MySQL อย่างถูกต้องฉันพบข้อผิดพลาดนี้หลายครั้งและฉันคิดว่ามันซับซ้อนในการตรวจแก้จุดบกพร่องจากซ็อกเก็ตฉันหมายความว่าอาจติดตั้งได้ง่ายกว่า

หากคุณใช้ CentOS 7 นี่คือวิธีที่ถูกต้องในการติดตั้ง:

ก่อนอื่นให้เพิ่มแหล่งชุมชน mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

จากนั้นคุณสามารถติดตั้งได้โดย yum install mysql-community-server

เริ่มด้วย systemctl: systemctl start mysqld


1

ปัญหาของฉันคือฉันติดตั้ง mysql สำเร็จและทำงานได้ดี

แต่วันหนึ่งมีข้อผิดพลาดเกิดขึ้น

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

และไม่มีไฟล์ mysql.sock

วิธีแก้ปัญหานี้แก้ปัญหาของฉันและ mysql ก็เปิดใช้งานอีกครั้ง:

เข้าสู่ระบบด้วย root:

sudo su -

วิ่ง:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

ทดสอบในฐานะ root:

mysql -u root -p

mysql ควรจะพร้อมใช้งานแล้ว

ฉันหวังว่านี่จะช่วยคนอื่นได้เช่นกัน


1

โปรดทราบว่าในขณะที่ mysql อ่านข้อมูลตำแหน่งของ socketfile จากไฟล์ my.cnf โปรแกรม mysql_secure_installation ดูเหมือนว่าจะไม่ทำอย่างถูกต้องในบางครั้ง

ดังนั้นหากคุณเป็นเหมือนฉันและสลับสิ่งต่าง ๆ รอบเวลาการติดตั้งคุณอาจเข้าสู่สถานการณ์ที่คุณสามารถเชื่อมต่อกับฐานข้อมูลด้วย mysql ได้ แต่สิ่งที่ไม่สามารถรักษาความปลอดภัยได้ (ไม่ได้ใช้สคริปต์นั้น)

เพื่อแก้ไขข้อเสนอแนะจาก sreddy ใช้งานได้ดี: สร้าง softlink จากตำแหน่งที่สคริปต์คาดว่าซ็อกเก็ตจะไปยังตำแหน่งที่เป็นจริง ตัวอย่าง:

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

(ฉันใช้ / tmp / เป็นตำแหน่งเริ่มต้นสำหรับซ็อกเก็ต)


1

มันทำงานได้สำหรับฉันกับการเปลี่ยนแปลงต่อไปนี้

เส้นทางใดก็ตามสำหรับซ็อกเก็ตจะถูกกล่าวถึงใน [mysqld] และเหมือนกันใน [ลูกค้า] ใน my.cnf และรีสตาร์ท mysql

[mysqld] socket = / var / lib / mysql / mysql.sock

[ลูกค้า] socket = / var / lib / mysql / mysql.sock


1

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

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

ดังนั้นคุณต้องระบุโฮสต์ดังนี้:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $

1

นี่อาจเป็นข้อเสนอแนะที่โง่ แต่ให้แน่ใจ 100% ว่า DB ของคุณยังโฮสต์อยู่ที่ localhost ตัวอย่างเช่นหากผู้ดูแลเครือข่ายเลือก (หรือเปลี่ยนเป็น) โฮสต์ Amazon Amazon คุณจะต้องใช้ชื่อโฮสต์นั้นแทน


ฉันใช้ผู้ให้บริการโฮสต์ 1 และ 1 และได้รับข้อผิดพลาดนี้หลังจาก ssh-ing ไปยังโฮสต์ การแก้ไขเป็นเพียงเพื่อให้ชื่อโฮสต์ "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"
rob

1

ในกรณีของฉันฉันกำลังนำเข้าฐานข้อมูลใหม่และฉันไม่สามารถเชื่อมต่อได้อีกหลังจากนั้น ในที่สุดฉันก็รู้ว่านั่นเป็นปัญหาเรื่องอวกาศ

ดังนั้นคุณสามารถลบฐานข้อมูลล่าสุดและขยายฮาร์ดไดรฟ์หรือสิ่งที่ฉันทำคืนค่าภาพรวมของเครื่องเสมือนของฉัน

ในกรณีที่มีคนคิดว่ามีประโยชน์


0

พบปัญหานี้ขณะที่พยายามเชื่อมต่อ mysql ในไคลเอ็นต์ SSH พบว่าการเพิ่มเส้นทางซ็อกเก็ตไปยังคำสั่งมีประโยชน์เมื่อจำเป็นต้องสลับระหว่างซ็อกเก็ต

> mysql -u user -p --socket=/path/to/mysql5143.sock

0

นี่เป็นปัญหาถ้าพื้นที่ดิสก์ของคุณหมด วิธีแก้ไขคือเพิ่มพื้นที่ว่างจาก HDD

โปรดอ่านเพิ่มเติมเพื่ออธิบาย:

หากคุณใช้งาน MySQL ที่ LINUX ตรวจสอบพื้นที่ว่างของ HDD ด้วยดิสก์คำสั่งฟรี:

 df 

หากคุณได้รับสิ่งที่ต้องการ:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

นี่คือปัญหาและตอนนี้คุณมีทางออก!

เนื่องจาก mysql.sock ต้องการที่จะสร้างขึ้นที่โฟลเดอร์ mysql ซึ่งเกือบตลอดเวลาภายใต้รูทโฟลเดอร์ไม่สามารถบรรลุได้เพราะพื้นที่ไม่เพียงพอ

หากคุณให้คำสั่ง ls เป็นระยะ ๆ ภายใต้ไดเรกทอรี mysql (ที่ openSUSE 11.1 เป็น at / var / lib / mysql) คุณจะได้รับสิ่งต่อไปนี้:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

ไฟล์ mysql.sock ปรากฏขึ้นและหายไปบ่อยครั้ง (คุณต้องลองจัดสรรด้วย ls เพื่อเข้าใช้อินสแตนซ์ด้วยไฟล์ mysql.sock ในโฟลเดอร์)

สิ่งนี้เกิดจากพื้นที่ดิสก์ไม่เพียงพอ

ฉันหวังว่าฉันจะช่วยบางคน !!!! ขอบคุณ!



0

ลองวิธีแก้ปัญหา 2, 3 แรก เกิดข้อผิดพลาดคือป๊อปอัปสไตล์ & หากคุณไม่พบ/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

ตรวจสอบพื้นที่ว่างใน / var /

df

หากไดเรกทอรีเต็มให้ลบไฟล์ / ไดเรกทอรีที่ไม่ได้ใช้ออก

rm /var/cache/*

อาจเป็นปัญหาของคุณจะเรียงลำดับในขณะนี้


0

หากคุณอยู่ในเชลล์ของsf.netลอง:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

เปลี่ยน {LETTER} และ {GROUP ID} ตามที่แสดงในฐานข้อมูล MySQL ของโปรไฟล์ผู้ดูแลโครงการ

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