ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันพยายามเชื่อมต่อกับ mysql:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
มีวิธีแก้ไขข้อผิดพลาดนี้หรือไม่? อะไรคือเหตุผลเบื้องหลัง
ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันพยายามเชื่อมต่อกับ mysql:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
มีวิธีแก้ไขข้อผิดพลาดนี้หรือไม่? อะไรคือเหตุผลเบื้องหลัง
คำตอบ:
คุณกำลังเชื่อมต่อกับ "localhost" หรือ "127.0.0.1" หรือไม่? ฉันสังเกตเห็นว่าเมื่อคุณเชื่อมต่อกับ "localhost" ตัวเชื่อมต่อซ็อกเก็ตถูกใช้ แต่เมื่อคุณเชื่อมต่อกับ "127.0.0.1" ตัวเชื่อมต่อ TCP / IP จะถูกใช้ คุณสามารถลองใช้ "127.0.0.1" หากไม่ได้เปิดใช้งานตัวเชื่อมต่อซ็อกเก็ต / ทำงาน
/etc/hosts
ไฟล์ในภาชนะนักเทียบท่าของฉันแสดงให้ฉันเห็นชื่อโฮสต์ MySql mysql
ที่จะ การใช้ชื่อโฮสต์เดียวกันนี้ในการกำหนดค่าการเชื่อมต่อของฉันสามารถแก้ไขปัญหาได้
ตรวจสอบให้แน่ใจว่าบริการ mysql ของคุณกำลังทำงาน
service mysqld start
จากนั้นลองใช้วิธีใดวิธีหนึ่งดังต่อไปนี้:
(ถ้าคุณยังไม่ได้ตั้งรหัสผ่านสำหรับ mysql)
mysql -u root
หากคุณได้ตั้งรหัสผ่านแล้ว
mysql -u root -p
service mariadb start
เพราะmariadb.org/debian-9-released-mariadb-mysql-variant
หากไฟล์ของคุณ my.cnf (โดยปกติในโฟลเดอร์ etc) ได้รับการกำหนดค่าอย่างถูกต้องด้วย
socket=/var/lib/mysql/mysql.sock
คุณสามารถตรวจสอบว่า mysql ทำงานด้วยคำสั่งต่อไปนี้:
mysqladmin -u root -p status
ลองเปลี่ยนสิทธิ์ของคุณเป็นโฟลเดอร์ mysql หากคุณทำงานในพื้นที่คุณสามารถลอง:
sudo chmod -R 777 /var/lib/mysql/
ที่แก้ไขมันสำหรับฉัน
เซิร์ฟเวอร์ MySQL ไม่ทำงานหรือไม่ใช่ตำแหน่งของไฟล์ซ็อกเก็ต (ตรวจสอบ my.cnf)
ส่วนใหญ่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
นั่นช่วยแก้ไขปัญหาของฉัน
หากคุณอยู่ใน RHEL ล่าสุดคุณอาจต้องเริ่ม mariadb (โอเพ่นซอร์ส mysql db) แทน mysql db:
yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start
จากนั้นคุณควรจะสามารถเข้าถึง mysql ได้ตามปกติ:
mysql -u root -p
mariadb-server
และmariadb
ไม่ลืมที่จะเรียกใช้mysql_secure_installation
ในการทำความสะอาดการตั้งค่าที่ไม่ปลอดภัยบางส่วนเริ่มต้น
ในกรณีของฉันฉันได้ย้ายไฟล์ซ็อกเก็ตไปยังตำแหน่งอื่นภายใน/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
เพียงแก้ไข/etc/my.cnf
เพิ่มบรรทัดต่อไปนี้ลงในmy.cnf
[mysqld]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
รีสตาร์ท mysql และเชื่อมต่ออีกครั้ง
ผู้ใช้ mysql -u ฐานข้อมูลรหัสผ่าน -p โฮสต์ -h;
ตรวจสอบว่าบริการ mysqld ของคุณกำลังทำงานอยู่หรือไม่หากไม่ได้ทำงานให้เริ่มบริการ
หากปัญหาของคุณไม่ได้แก้ไขให้มองหาและแก้ไขดังต่อไปนี้ที่คุณเห็นเส้นที่เริ่มต้นด้วย/etc/my.cnf
socket
ทำการสำรองไฟล์นั้นก่อนที่จะทำการอัพเดทนี้
socket=/var/lib/mysql/mysql.sock
เปลี่ยนไป
socket=/opt/lampp/var/mysql/mysql.sock -u root
MariaDB ซึ่งเป็นชุมชนที่ได้รับการพัฒนาของ MySQL ได้กลายเป็นการนำ MySQL มาใช้ในหลาย ๆ รูปแบบ
ดังนั้นก่อนอื่นคุณควรเริ่ม
$ sudo systemctl start mariadb
หากล้มเหลวแทนที่จะลอง
$ sudo systemctl start mysqld
จากนั้นเริ่ม mysql
$ mysql -u root -p
ณ วันนี้ใน Fedora แพ็คเกจชื่อmariadb
และใน Ubuntu มันถูกเรียกว่าmariadb-server
และในอูบุนตูจะเรียกว่า
ดังนั้นคุณอาจต้องติดตั้งหากยังไม่ได้ติดตั้งในระบบของคุณ
ตรวจสอบให้แน่ใจว่าคุณมีพื้นที่เหลือเพียงพอ /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
สิ่งนี้จะช่วยให้คุณลดการใช้งานดิสก์
innodb_buffer_pool_size
my.cnf
การตั้งค่าให้มีค่าเล็กน้อยเช่นinnodb_buffer_pool_size = 50M
เป็นการทดสอบที่ดีที่จะทิ้งสมมติฐานนี้)
นี่คือสิ่งที่ทำงานสำหรับฉัน:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
โปรดตรวจสอบว่าบริการ mysql อื่นกำลังทำงานอยู่หรือไม่
ตรวจสอบให้แน่ใจว่าคุณเริ่มเซิร์ฟเวอร์:
mysql.server start
จากนั้นเชื่อมต่อกับผู้ใช้รูท:
mysql -uroot
หาก mysql ของคุณใช้งานได้ก่อนหน้านี้และหยุดกึกเพียงแค่ "รีบูต" เซิร์ฟเวอร์
พบปัญหานี้ใน CentOS VPS .- ของฉันหรือไม่
ได้รับอย่างต่อเนื่อง
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)
พยายามใช้เทคนิคทั้งหมดในที่สุดการรีสตาร์ทเซิร์ฟเวอร์จะแก้ไขปัญหา ->
shutdown -r now
หวังว่านี่จะช่วยได้ !!
ลอง
echo 0 > /selinux/enforce
หากคุณเปลี่ยนไฟล์ใน / var / lib / mysql [เช่นคัดลอกหรือแทนที่] คุณต้องตั้งค่าเจ้าของไฟล์เป็น mysql สิ่งนี้สำคัญมากถ้า mariadb.service รีสตาร์ทล้มเหลว
chown -R mysql: mysql / var / lib / mysql / *
chmod -R 700 / var / lib / mysql / *
ก่อนอื่นให้ป้อน "service mysqld start" และเข้าสู่ระบบ
โปรดตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งเซิร์ฟเวอร์ 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
ปัญหาของฉันคือฉันติดตั้ง 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 ควรจะพร้อมใช้งานแล้ว
ฉันหวังว่านี่จะช่วยคนอื่นได้เช่นกัน
โปรดทราบว่าในขณะที่ mysql อ่านข้อมูลตำแหน่งของ socketfile จากไฟล์ my.cnf โปรแกรม mysql_secure_installation ดูเหมือนว่าจะไม่ทำอย่างถูกต้องในบางครั้ง
ดังนั้นหากคุณเป็นเหมือนฉันและสลับสิ่งต่าง ๆ รอบเวลาการติดตั้งคุณอาจเข้าสู่สถานการณ์ที่คุณสามารถเชื่อมต่อกับฐานข้อมูลด้วย mysql ได้ แต่สิ่งที่ไม่สามารถรักษาความปลอดภัยได้ (ไม่ได้ใช้สคริปต์นั้น)
เพื่อแก้ไขข้อเสนอแนะจาก sreddy ใช้งานได้ดี: สร้าง softlink จากตำแหน่งที่สคริปต์คาดว่าซ็อกเก็ตจะไปยังตำแหน่งที่เป็นจริง ตัวอย่าง:
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
(ฉันใช้ / tmp / เป็นตำแหน่งเริ่มต้นสำหรับซ็อกเก็ต)
มันทำงานได้สำหรับฉันกับการเปลี่ยนแปลงต่อไปนี้
เส้นทางใดก็ตามสำหรับซ็อกเก็ตจะถูกกล่าวถึงใน [mysqld] และเหมือนกันใน [ลูกค้า] ใน my.cnf และรีสตาร์ท mysql
[mysqld] socket = / var / lib / mysql / mysql.sock
[ลูกค้า] socket = / var / lib / mysql / mysql.sock
วิธีหนึ่งในการทำให้เกิดข้อผิดพลาดนี้ซ้ำอีกครั้ง: หากคุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์ต่างประเทศ แต่ให้เชื่อมต่อกับเซิร์ฟเวอร์ท้องถิ่นที่ไม่มีอยู่:
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 ~ $
นี่อาจเป็นข้อเสนอแนะที่โง่ แต่ให้แน่ใจ 100% ว่า DB ของคุณยังโฮสต์อยู่ที่ localhost ตัวอย่างเช่นหากผู้ดูแลเครือข่ายเลือก (หรือเปลี่ยนเป็น) โฮสต์ Amazon Amazon คุณจะต้องใช้ชื่อโฮสต์นั้นแทน
ในกรณีของฉันฉันกำลังนำเข้าฐานข้อมูลใหม่และฉันไม่สามารถเชื่อมต่อได้อีกหลังจากนั้น ในที่สุดฉันก็รู้ว่านั่นเป็นปัญหาเรื่องอวกาศ
ดังนั้นคุณสามารถลบฐานข้อมูลล่าสุดและขยายฮาร์ดไดรฟ์หรือสิ่งที่ฉันทำคืนค่าภาพรวมของเครื่องเสมือนของฉัน
ในกรณีที่มีคนคิดว่ามีประโยชน์
พบปัญหานี้ขณะที่พยายามเชื่อมต่อ mysql ในไคลเอ็นต์ SSH พบว่าการเพิ่มเส้นทางซ็อกเก็ตไปยังคำสั่งมีประโยชน์เมื่อจำเป็นต้องสลับระหว่างซ็อกเก็ต
> mysql -u user -p --socket=/path/to/mysql5143.sock
นี่เป็นปัญหาถ้าพื้นที่ดิสก์ของคุณหมด วิธีแก้ไขคือเพิ่มพื้นที่ว่างจาก 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 ในโฟลเดอร์)
สิ่งนี้เกิดจากพื้นที่ดิสก์ไม่เพียงพอ
ฉันหวังว่าฉันจะช่วยบางคน !!!! ขอบคุณ!
ฉันต้องปิดการใช้งานexplicit_defaults_for_timestamp
จาก my.cnf
ลองวิธีแก้ปัญหา 2, 3 แรก เกิดข้อผิดพลาดคือป๊อปอัปสไตล์ & หากคุณไม่พบ/var/lib/mysql/mysql.sock
find /var/ -name mysql.sock
ตรวจสอบพื้นที่ว่างใน / var /
df
หากไดเรกทอรีเต็มให้ลบไฟล์ / ไดเรกทอรีที่ไม่ได้ใช้ออก
rm /var/cache/*
อาจเป็นปัญหาของคุณจะเรียงลำดับในขณะนี้
หากคุณอยู่ในเชลล์ของsf.netลอง:
mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p
เปลี่ยน {LETTER} และ {GROUP ID} ตามที่แสดงในฐานข้อมูล MySQL ของโปรไฟล์ผู้ดูแลโครงการ