सॉकेट '/var/lib/mysql/mysql.sock' (2) के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं किया जा सकता है)


255

जब मैं mysql से कनेक्ट करने का प्रयास करता हूं तो मुझे निम्न त्रुटि मिल रही है:

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

क्या इस त्रुटि का कोई हल है? इसके पीछे क्या कारण हो सकता है?


मैंने इसका उत्तर यहाँ दिया है, कृपया नीचे दिए गए लिंक की जाँच करें: stackoverflow.com/a/35577309/4773290
प्रतिक पाटील

जवाबों:


222

क्या आप "लोकलहोस्ट" या "127.0.0.1" से जुड़ रहे हैं? मैंने देखा कि जब आप "लोकलहोस्ट" से कनेक्ट करते हैं तो सॉकेट कनेक्टर का उपयोग किया जाता है, लेकिन जब आप "127.0.0.1" से कनेक्ट होते हैं तो टीसीपी / आईपी कनेक्टर का उपयोग किया जाता है। यदि सॉकेट कनेक्टर सक्षम / कार्य नहीं कर रहा है, तो आप "127.0.0.1" का उपयोग करने का प्रयास कर सकते हैं।


27
उस स्थिति में, आपको शायद जांचना चाहिए कि क्या आपका MYSQL सर्वर वास्तव में चल रहा है।
Jan Thomä

3
आप सॉकेट पैरामीटर (-sr / usr / bin / mysql के साथ) के साथ सॉकेट का उपयोग करने के लिए भी बाध्य कर सकते हैं और एक पोर्ट (-P / usr / bin / mysql के साथ) प्रदान करके TCP / IP को बाध्य कर सकते हैं।
Kaor

लोकलहोस्ट के अलावा पूरी तरह से योग्य नेटवर्क नाम का उपयोग करना मेरे लिए काम कर गया। बस यह सुनिश्चित करें कि यह क्लाइंट साइड 'होस्ट्स' फ़ाइल में घोषित किया गया है।
फेबिन हदादी

2
साइबरविन उपयोगकर्ताओं पर ध्यान दें: यदि cygwin mysql क्लाइंट किसी स्थानीय WAMP mysql सर्वर को उदाहरण के लिए हुक करने का प्रयास करता है, तो -h <hostname लोकलहोस्ट के अलावा> का उपयोग करें। Mysql.sock फ़ाइल बनाने का प्रयास न करें और जो भी my.cnf फ़ाइल में यह घोषित करें, वह काम नहीं करेगा।
फैबिन हदादी

एक गलत होस्टनाम ने मुझे ठीक वही त्रुटि दी। /etc/hostsमेरे docker कंटेनर में फ़ाइल को देखकर मुझे MySql hostname दिखाया गया mysql। मेरे कनेक्ट कॉन्फ़िगरेशन में इसी होस्टनाम का उपयोग करने से समस्या हल हो गई।
स्टीफन

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
उस आदमी को एक पदक दो।
सिराज आलम

यह मेरे लिए जवाब था। चूँकि मैं mariadb का उपयोग कर रहा हूं, इसलिए समाधान निम्नलिखित था: "sudo systemctl start mariadb"। उसके बाद सब ठीक था।
मोहनन

@ ज़ाहरा को एक पदक दें
अहमद सी

28

यदि आपकी फ़ाइल my.cnf (आमतौर पर आदि फ़ोल्डर में) सही तरीके से कॉन्फ़िगर की गई है

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

आप जांच सकते हैं कि mysql निम्नलिखित कमांड के साथ चल रहा है या नहीं:

mysqladmin -u root -p status

mysql फ़ोल्डर में अपनी अनुमति बदलने का प्रयास करें। यदि आप स्थानीय स्तर पर काम कर रहे हैं, तो आप कोशिश कर सकते हैं:

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

यह मेरे लिए हल है


यह मेरे लिए भी काम करता है, लेकिन मैं नवीनतम संस्करण में अपग्रेड करने के बाद इस समस्या को प्रकट करता हूं, क्या मुझे पता है कि ऐसा क्यों होता है?
बेन

sudo chmod -R 777 / var / lib / mysql / मेरे लिए एक मुद्दे के साथ काम करते हुए मुझे एक
डॉक

23

MySQL सर्वर नहीं चल रहा है, या वह उसकी सॉकेट फ़ाइल का स्थान नहीं है (my.cnf की जाँच करें)।


मुझे ऊपर वर्णित समस्या थी और यह समस्या थी। धन्यवाद।

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फ़ाइल को खोजने में मदद कर सकता है
नोबिता

15

यदि आप हाल ही के आरएचईएल पर हैं, तो आपको माईसक्यूएल डीबी के बजाय मारीदब (एक खुला स्रोत 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कुछ डिफ़ॉल्ट असुरक्षित सेटिंग्स को साफ करने के लिए दौड़ना न भूलें ।
डियो फुंग

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

आप mysql config के अंदर अनुभाग के तहत एक ही सॉकेट लाइन जोड़कर इस समस्या को ठीक कर सकते हैं ।[client]


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 होस्ट;


एकमात्र सही उत्तर। मुझे आश्चर्य है कि इसमें पर्याप्त वोट क्यों नहीं हैं।
सेंटआउ

11

जांचें कि आपकी mysqld सेवा चल रही है या नहीं, अगर नहीं चल रही है, तो सेवा शुरू करें।

यदि आपकी समस्या हल नहीं हुई है, तो /etc/my.cnfनिम्न के लिए देखें और संशोधित करें, जहां आपको एक पंक्ति शुरू होती है socket। इस अद्यतन को करने से पहले उस फ़ाइल का बैकअप लें।

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

में बदलो

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

1
हाय सेकर, मैंने "find /name my.cnf" दर्ज किया, और मुझे दो स्थान मिले। 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf। तो, जो एक का उपयोग करने के लिए .. मैं यहाँ सवाल पूछा .. stackoverflow.com/questions/32437796/…
नाना पार्टीकर

7

MyDB का एक समुदाय विकसित MariaDB, कई वितरणों में MySQL का डिफ़ॉल्ट कार्यान्वयन बन गया है।

तो पहले आपको शुरू करना चाहिए,

$ sudo systemctl start mariadb

यदि यह विफल रहता है, तो प्रयास करें,

$ sudo systemctl start mysqld

फिर mysql शुरू करने के लिए,

$ mysql -u root -p

आज तक, फेडोरा में पैकेज का नाम दिया गया है mariadb और उबंटू में इसे कहा जाता है 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

यह आपको डिस्क उपयोग को कम रखने में मदद करेगा।


धन्यवाद, मैं oracle virtualbox पर mysql चला रहा हूं और जब मैंने अपनी bd की डंप बनाई, तो मैं अंतरिक्ष से बाहर चला गया, और शुरू करने के लिए mysql सर्वर प्राप्त नहीं कर सका, जब मैंने डंप फ़ाइल को हटाया तो मैं mysql सर्वर को पुनरारंभ करने में सक्षम था।
जेसी

1
इससे मेरे लिए हल हो गया। मेरे पास innodb_buffer_pool_size उत्पादन वातावरण के लिए बहुत उच्च मूल्य पर सेट था और इसने मेरे वर्चुअल मशीन पर mysql को क्रैश कर दिया।
बेंजामिन ब्रेज़ी

1
मैं का उपयोग करते समय इस समस्या थी phabricator और समाधान को बदलने के लिए था innodb_buffer_pool_sizeमें my.cnf। एक छोटे से मूल्य की तरह इसे स्थापित करना innodb_buffer_pool_size = 50Mइस परिकल्पना को त्यागने के लिए एक अच्छा परीक्षण है;)
यार्कलमैरिनो

यह विकराल समस्या थी, सब कुछ लेकिन डिस्क स्थान की जाँच की। / Var से मुक्त स्थान, यह वापस आ गया!
नदजीब मामी



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

सबसे पहले "सेवा mysqld start" डालें और लॉगिन करें


तुम क्या कहना चाहते हो? कृपया पढ़ें पूछे जाने वाले प्रश्न यहां सवाल पूछने से पहले
फ्रीक

तीन साल पहले इस सवाल का सफलतापूर्वक जवाब दिया गया था। यह सटीक जवाब पिछले साल अधिक पूरी तरह से दिया गया था।
केयर्नवॉन

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 को सफलतापूर्वक स्थापित किया और यह ठीक काम किया।

लेकिन एक दिन, वही त्रुटि हुई।

सॉकेट '/var/lib/mysql/mysql.sock' (2) के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं किया जा सकता है)

और कोई mysql.sock फ़ाइल मौजूद नहीं थी।

इस समस्या ने मेरी समस्या को हल कर दिया और mysql उठ गया और फिर से चल रहा था:

रूट के रूप में लॉग इन करें:

sudo su -

Daud:

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

जड़ के रूप में परीक्षण करें:

mysql -u root -p

mysql अब उठकर चलना चाहिए।

मुझे उम्मीद है कि यह किसी और की भी मदद कर सकता है।


1

ध्यान दें कि जब mysql my.cnf फ़ाइल से सॉकेटफाइल के स्थान की जानकारी पढ़ता है, तो mysql_secure_installation प्रोग्राम कई बार ऐसा सही ढंग से नहीं करता है।

इसलिए यदि आप मेरे जैसे हैं और इंस्टालेशन के समय चीजों को फेरबदल करते हैं, तो आप उस स्थिति में पहुंच सकते हैं, जहां आप डेटाबेस को mysql के साथ ठीक से जोड़ सकते हैं, लेकिन इस चीज को सुरक्षित नहीं किया जा सकता है (वैसे भी उस स्क्रिप्ट का उपयोग नहीं)।

इसे ठीक करने के लिए sreddy का सुझाव अच्छी तरह से काम करता है: एक सॉफ्टलिंक बनाएं जहां से स्क्रिप्ट को सॉकेट की अपेक्षा होगी कि वह वास्तव में कहां है। उदाहरण:

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

(मैं सॉकेट के लिए / tmp / एक डिफ़ॉल्ट स्थान के रूप में उपयोग करता हूं)


1

इसने मेरे लिए निम्नलिखित परिवर्तनों के साथ काम किया

सॉकेट के लिए जो भी रास्ता [mysqld] में वर्णित है और my.cnf में [क्लाइंट] में वही है और mysql को पुनरारंभ करें

[mysqld] सॉकेट = / var / lib / mysql / mysql.sock

[ग्राहक] सॉकेट = / 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

यह एक बेवकूफी भरा सुझाव हो सकता है लेकिन सुनिश्चित करें कि आपका DB अभी भी लोकलहोस्ट में होस्ट किया गया है। उदाहरण के लिए, यदि किसी नेटवर्क व्यवस्थापक ने अमेज़ॅन DB होस्टिंग को चुना (या बदल दिया गया), तो आपको इसके बजाय उस होस्टनाम की आवश्यकता होगी!


मैं होस्टिंग प्रदाता 1and1 का उपयोग कर रहा हूं और मेजबान को ssh-ing के बाद यह त्रुटि मिली है। फिक्स बस होस्ट नाम "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520" प्रदान करने के लिए था
लूट

1

मेरे मामले में, मैं एक नया डेटाबेस आयात कर रहा था, और मैं उसके बाद फिर से कनेक्ट करने में सक्षम नहीं था। अंत में मुझे एहसास हुआ कि यह एक अंतरिक्ष समस्या थी।

तो आप पिछले डेटाबेस को हटा सकते हैं और आपको हार्ड ड्राइव या जो मैंने किया है, उसका विस्तार करके मेरी वर्चुअल मशीन का स्नैपशॉट पुनर्स्थापित कर सकते हैं।

बस के मामले में किसी को लगता है कि उपयोगी है


0

SSH क्लाइंट में mysql को कनेक्ट करने का प्रयास करते समय इस समस्या में भाग लिया, सॉकेट के बीच स्विच करने पर कमांड के लिए सॉकेट पथ को जोड़ने में मददगार पाया जाता है।

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

0

यदि आप डिस्क स्थान से बाहर चल रहे हैं तो यह एक समस्या है। समाधान HDD से कुछ स्थान खाली करना है।

कृपया स्पष्टीकरण के लिए और अधिक पढ़ें:

यदि आप LINUX में MySQL चला रहे हैं, तो कमांड डिस्क मुक्त के साथ 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 फ़ोल्डर में बनाया जाना चाहता है, जो लगभग हमेशा रूट फ़ोल्डर के अंतर्गत होता है, क्योंकि स्थान की कमी के कारण इसे प्राप्त नहीं किया जा सकता है।

यदि आप समय-समय पर mysql डायरेक्टरी के तहत ls कमांड देते हैं (OpenSUSE 11.1 पर / 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 फ़ाइल अक्सर दिखाई देती है और गायब हो जाती है (आपको फ़ोल्डर पर mysql.sock फ़ाइल के साथ आवृत्ति हिट करने के लिए ls के साथ आवंटित करने की कोशिश करनी चाहिए)।

यह पर्याप्त डिस्क स्थान के कारण नहीं है।

मुझे उम्मीद है कि मैं कुछ लोगों की मदद करूँगा !!!! धन्यवाद!


0

मुझे explicit_defaults_for_timestampmy.cnf से अक्षम करना पड़ा ।


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 डाटाबेस ऑफ प्रोजेक्ट एडमिन प्रोफाइल में दिखाया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.