चेतावनी: mysql_connect (): [२००२] ऐसी कोई फ़ाइल या निर्देशिका (यूनिक्स के माध्यम से जुड़ने की कोशिश नहीं: ///tmp/mysql.sock)


246

मैं अपने MySQL DB को अपने Apple (PHP के साथ) टर्मिनल के साथ जोड़ने की कोशिश कर रहा हूँ।

कल यह ठीक काम किया, और अब मुझे अचानक शीर्षक में त्रुटि मिली।

स्क्रिप्ट तब काम करती है जब मैं इसे चलाने के लिए अपने ब्राउज़र का उपयोग करता हूं (मेरे पास XAMPP इंस्टॉल है), लेकिन टर्मिनल DB से कनेक्ट करने से इनकार करता है।

यहां वह फ़ाइल है जिसे मैं कनेक्ट करना शामिल करता हूं (जब मैं इसे शामिल नहीं करता तो स्क्रिप्ट काम करती है, लेकिन फिर यह DB से कनेक्ट नहीं होती है):

<?php
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("FNB1C_data") or die(mysql_error());
?>

यह काम करना चाहिए, क्योंकि यह मेरे ब्राउज़र के साथ काम करता है।

टर्मिनल पर मैं जिस कमांड का उपयोग करता हूं php scriptname.php

जवाबों:


415

किसी कारण से ओएस एक्स पर mysql आवश्यक सॉकेट फ़ाइल के स्थानों को थोड़ा गलत हो जाता है, लेकिन शुक्र है कि समाधान एक प्रतीकात्मक लिंक स्थापित करने के रूप में सरल है।

आप के रूप में एक सॉकेट (एक शून्य लम्बाई फ़ाइल के रूप में प्रदर्शित) हो सकता है /tmp/mysql.sockया /var/mysql/mysql.sockहै, लेकिन एक या अधिक एप्लिकेशन इसके लिए एक और जगह से लग रही है। इस कमांड के साथ पता करें:

ls -l /tmp/mysql.sock /var/mysql/mysql.sock

सॉकेट को स्थानांतरित करने के बजाय, कॉन्फ़िगर फ़ाइलों को संपादित करें, और संपादित फ़ाइलों को स्थानीय और सर्वर से दूर रखने के लिए याद रखना होगा जहां रास्ते सही हैं, बस एक प्रतीकात्मक लिंक बनाएं ताकि आपका मैक आवश्यक सॉकेट को ढूंढता है, भले ही वह गलत जगह देख रहा हो। !

यदि आपके पास है, /tmp/mysql.sockलेकिन नहीं /var/mysql/mysql.sockतो ...

cd /var 
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock

यदि आपके पास है, /var/mysql/mysql.sockलेकिन नहीं /tmp/mysql.sockतो ...

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

आपको निर्देशिका और लिंक बनाने के लिए अनुमतियों की आवश्यकता होगी, इसलिए यदि आवश्यक हो तो sudo के साथ ऊपर दिए गए कमांड को उपसर्ग करें।


अच्छा उत्तर। फिक्स ने मेरे लिए काम किया। क्या आप जानते हैं कि यह एक बार क्यों काम कर सकता है और फिर दोबारा काम नहीं कर सकता है? मुझे भी यही समस्या थी।
निकोल

16
यह बल्कि हैक है। मैं इसके बजाय MySQL के छिपे शॉर्टकट के आसपास काम करने के लिए @luismreis के उत्तर की सिफारिश करता हूं।
मैटसीजी

2
मेरे लिए काम नहीं किया ... मैं उन फ़ाइलों में से कोई भी नहीं है। लेकिन लुइस्मिरिस के जवाब ने काम कर दिया!
ग्रीगोइरे

4
यह "हैकी" नहीं है। यह localhostसॉकेट को काम करने का सही तरीका है , और यह महत्वपूर्ण हो सकता है यदि आप डेटाबेस तक पहुंचने से पहले पैकेट को राउटर पर भेजने से अतिरिक्त ओवरहेड नहीं चाहते हैं।
केबमैन

1
मेरे Ubuntu 10.04 पर पथ सही नहीं था। मुझे यह करना था: cd /tmpऔर फिर sudo ln -s /var/run/mysqld/mysqld.sock mysql.sock:।
फ्राँज़्लोरेंज़ोन

371

मैं भी इस त्रुटि थी, लेकिन केवल सुझाव के माध्यम से इसे ठीक कर सकता है यहाँ

संक्षेप में, उपयोग करने के लिए:

127.0.0.1

के बजाय:

localhost

कारण यह है कि "लोकलहोस्ट" MySQL ड्राइवर का एक विशेष नाम है, जो इसे TCP सॉकेट के बजाय MySQL से कनेक्ट करने के लिए UNIX सॉकेट का उपयोग करता है।


1
यदि यह काम करता है, तो अपनी hostsफ़ाइल की जांच करें , यह गायब हो सकता है या गड़बड़ हो सकता है
Fabrizio

3
यह भी उल्लेख करना अच्छा है: मेरे जैसे
एमएमपी

यह समाधान अतिरिक्त उपरि बनाता है क्योंकि पैकेट को पहले राउटर द्वारा भेजा जाता है। आमतौर पर परीक्षण के दौरान एक बड़ी समस्या नहीं है, लेकिन यह डेटा के बड़े पैकेट के साथ एक समस्या बन सकता है।
केबमैन

3
@Fabrizio नहीं, यह संबंधित नहीं है। जब आप नाम के रूप में लोकलहोस्ट का उपयोग करते हैं, तो mysql एक यूनिक्स सॉकेट का उपयोग करेगा जो एक फ़ाइल प्रविष्टि (mysql.sock, उदाहरण के लिए) के माध्यम से संभाला जाता है, एक Inet नहीं, भले ही लोकलहोस्ट / etc / मेजबानों में घोषित किया गया हो या नहीं। हालाँकि, जब आप इसके बजाय एक IP पते का उपयोग करते हैं, तो भी 127.0.0.1, आप mysql को इसके बजाय Inet सॉकेट खोलने के लिए मजबूर करते हैं।
13

1
क्या तब, इसका अर्थ है कि आपने MySQL db पर 'उपयोगकर्ता'% 'लोकलहोस्ट' को दिए गए सभी अनुदानों को तोड़ दिया होगा?
ऑक्टोपस

24

मुझे भी यही समस्या हो रही थी और मैंने इसे कैसे ठीक किया:

मेरे पास यह था और यह काम नहीं किया:

$con = mysql_connect('localhost', 'root', '1234');

मैंने यह किया और यह काम किया:

$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');

Mysql सर्वर का उपयोग करने के बजाय, मैं सीधे यूनिक्स सॉकेट से जुड़ा। मेरे लिए काम किया।


यह एकमात्र समाधान है जो मेरे लिए भी काम करता है। मेरे पास avar /mysql/mysql.sock नहीं है। और मेरे पास /tmp/mysql.sock नहीं है।
जेफ़बी 668888

क्या आपने लोकलहोस्ट के बजाय 127.0.0.1 की कोशिश की?
मत्तीस

21

MySQL सॉकेट स्थित है, सामान्य रूप से /tmp/mysql.sockया में /var/mysql/mysql.sock, लेकिन शायद PHP गलत जगह पर दिखता है।

  1. जांचें कि आपका सॉकेट कहां है:

     sudo /usr/libexec/locate.updatedb
  2. जब अद्यतन समाप्त किया जाता है:

     locate mysql.sock
  3. फिर अपने php.ini का पता लगाएं:

     php -i | grep php.ini

    यह कुछ इस तरह उत्पादन होगा:

     Configuration File (php.ini) Path => /opt/local/etc/php54
     Loaded Configuration File => /opt/local/etc/php54/php.ini
  4. अपना php.ini संपादित करें

     sudo vim /opt/local/etc/php54/php.ini
  5. लाइनों को बदलें:

     pdo_mysql.default_socket=/tmp/mysql.sock
     mysql.default_socket=/tmp/mysql.sock
     mysqli.default_socket = /tmp/mysql.sock

    जहाँ /tmp/mysql.sock आपके सॉकेट का मार्ग है।

  6. अपने संशोधनों को सहेजें और ESC + SHIFT: x से बाहर निकलें

  7. अपाचे को फिर से शुरू करें

     sudo apachectl stop
     sudo apachectl start

मेरे पास php.ini नहीं है; मेरे पास केवल एक php.ini.default है, इसलिए ऐसा प्रतीत होता है कि यहां वर्कअराउंड आवश्यक है: Apple.stackexchange.com/questions/65802/… हालाँकि, यह मेरे लिए काम नहीं किया।
user124384

@ user124384 आपकी स्थापना शायद टूट गया है: अपने नाम बदलने php.ini.defaultके लिए php.ini
संज्ञा

अपाचे को एक ही लाइन के साथ फिर से शुरू किया जा सकता है:sudo apachectl restart
fbiazi

11

मैं मैक ओएस एक्स पर एक्सएएमपीपी पर हूं, और ऊपर ब्रायन लोवे के समाधान ने थोड़ा संशोधन के साथ काम किया

Mysql.sock फ़ाइल वास्तव में "/ अनुप्रयोग / xampp / xamppfiles / var / mysql /" फ़ोल्डर में है। इसलिए इसे / tmp और / var / mysql दोनों से जोड़ना था। मैंने जाँच नहीं की है कि PHP कमांड लाइन द्वारा किसका उपयोग किया जाता है, लेकिन इसने ठीक किया, इसलिए मैं खुश हूँ :-)

sudo su
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /tmp/mysql.sock
mkdir /var/mysql
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock

1
ty - मैंने समाधान के लिए कुछ दिनों की खोज की और यह वह है जिसने अंत में चीजों को सही बनाया है! =) OS X पर भी XAMPP
ljubiccica

10

Mac OS X EL Capitan + MAMP Pro ऐसा करें

cd /var
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

फिर ऐसा करें

cd /tmp
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

आशा है कि यह आपको कुछ समय बचाता है।


यह mysql.dockहै /tmpकि इसे हल में लिंक कर रहा है। धन्यवाद!
मोहम्मद जे। रज़ेम

6

कारण यह है कि php का सही मार्ग नहीं खोज सकता है mysql.sock

कृपया सुनिश्चित करें कि आपका mysql पहले चल रहा है।

फिर, कृपया पुष्टि करें कि कौन सा पथ mysql.sockस्थित है, उदाहरण के लिए/tmp/mysql.sock

फिर इस पथ स्ट्रिंग को php.ini में जोड़ें:

  • mysql.default_socket = /tmp/mysql.sock
  • mysqli.default_socket = /tmp/mysql.sock
  • pdo_mysql.default_socket = /tmp/mysql.sock

अंत में, अपाचे को पुनरारंभ करें।


6

जब आप निम्न समस्या का सामना करते हैं:

PHP फेंकने की त्रुटि "चेतावनी: mysql_connect () http: //function.mysql-connect : 2002 ऐसी कोई फ़ाइल या निर्देशिका (यूनिक्स से जुड़ने की कोशिश नहीं कर रही: ///tmp/mysql.sock)"

सेट "mysql.default_socket" अपने में मूल्य /etc/php.iniके लिए

 "mysql.default_socket = /var/mysql/mysql.sock". 

फिर सर्वर व्यवस्थापक में वेब सेवा को पुनरारंभ करें


मेरे लिए यह सबसे अच्छा जवाब था - मेरे मामले में, मैं MAMP का उपयोग कर रहा हूं, मैंने अपने php.ini में जोड़ा: mysqli.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock mysql.default_socket = / Applications / MAMP / tmp /mysql/mysql.sock
अदाम्सकी

3

2002 की सॉकेट त्रुटि को ठीक करें - जो लिंक कर रही है जहाँ MySQL सॉकेट रखता है और जहाँ OSX को लगता है कि यह होना चाहिए, MySQL इसे / tmp में डालता है और OSX इसके लिए / var / mysql में देखता है सॉकेट एक प्रकार की फ़ाइल है जो mysql क्लाइंट को अनुमति देती है / सर्वर संचार।

sudo mkdir /var/mysql

और फिर

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

स्रोत: http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/


1

एक अन्य उपाय इस तरह से php.ini कॉन्फ़िगरेशन फ़ाइल में सॉकेट स्थान को ठीक करना है:

pdo_mysql.default_socket=/tmp/mysql.sock

बेशक, सिम्लिंक भी काम करता है, इसलिए यह वरीयता का मामला है जिसे आप बदलते हैं।


1

जब आप पोर्ट का उपयोग करके php53-mysql स्थापित करते हैं तो यह निम्नलिखित संदेश देता है जो इस समस्या का समाधान है:

To use mysqlnd with a local MySQL server, edit /opt/local/etc/php53/php.ini
and set mysql.default_socket, mysqli.default_socket and
pdo_mysql.default_socket to the path to your MySQL server's socket file.

For mysql5, use /opt/local/var/run/mysql5/mysqld.sock
For mysql51, use /opt/local/var/run/mysql51/mysqld.sock
For mysql55, use /opt/local/var/run/mysql55/mysqld.sock
For mariadb, use /opt/local/var/run/mariadb/mysqld.sock
For percona, use /opt/local/var/run/percona/mysqld.sock

मैं माउंटेन लायन का उपयोग कर रहा हूं और मैकस्पोर्ट्स का उपयोग करके MySQL स्थापित किया है।
शारिक

1

मैं एक ही मुद्दा रहा था

[PDOException] SQLSTATE [HY000] [२००२] ऐसी कोई फ़ाइल या निर्देशिका नहीं

[ErrorException] चेतावनी: PDO :: __ निर्माण (): [२००२] ऐसी कोई फ़ाइल या निर्देशिका (यूनिक्स के माध्यम से कनेक्ट करने का प्रयास नहीं कर रही है: ///var/mysql/mysql.sock) ... htdocs / Symonyony / seller / doctrine-dbal / lib / सिद्धांत / DBAL / चालक / PDOConnection.php

तो समाधान इस प्रकार समस्या को हल करने के लिए जुर्राब फाइल के लिए एक सिम्लिंक बनाना है। इसे हल करने के लिए निम्नलिखित करें:

$ sudo mkdir / निजी / var / mysql /

$ sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock/pStreet/var/mysql/mysql.sock

स्रोत: http://www.reecefowell.com/2012/07/21/symfony2-cli-does-not-connect-to-mysql-ORE-browser-works-fine/


किसी बाहरी वेबसाइट के लिंक के बजाय अपना उत्तर यहां पोस्ट करें।
एल्मेरकट सिप

0

मुझे वही त्रुटियां मिलीं। इससे पहले कि मैं phpMyAdmin शुरू करता, मैसकल एक स्टैंडअलोन एप्लिकेशन के रूप में चल रहा था।

मैंने अभी mysql को बंद किया तब sudo / Applications / XAMPP / xamppfiles / xampp stop sudo / Applications / XAMPP / xamppfiles / xampp start

यह ठीक काम किया


0

मुझे बस यह समस्या थी, लेकिन यह केवल कुछ पृष्ठों को लोड करते समय दिखाई दिया (अन्य पृष्ठों ने ठीक काम किया)। यह पता चला कि मैं कनेक्शन बंद करने के बाद MySQL को कॉल कर रहा था mysql_close()। तो, जैसा कि @brucenan ने कहा: सुनिश्चित करें कि जब आप इसे कहते हैं तो MySQL चल रहा है


0

आप इसे Apple टर्मिनल पर MAMP php को अलियास करके कर सकते हैं:

alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'

उदाहरण: > phpmamp - v

अब आप कुछ इस तरह से चला सकते हैं: > phpmamp scriptname.php

नोट: यह केवल वर्तमान टर्मिनल सत्र के लिए लागू किया जाएगा।


0

चूँकि आपके MAMP का उपयोग हो सकता है, या तो अपने पोर्ट को डिफ़ॉल्ट 3306 में बदलें या डेटाबेस में .php का उपयोग करें

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',// leave it for port 3306
    'username' => 'yourUserhere',
    'password' => 'yourPassword',
    'database' => 'yourDatabase',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

या डिफ़ॉल्ट सेटिंग्स के साथ:

$db['default'] = array(
        'dsn'   => '',
        'hostname' => '127.0.0.1:8889',// leave it for port 8889
        'username' => 'yourUserhere',
        'password' => 'yourPassword',
        'database' => 'yourDatabase',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );

0

डिफ़ॉल्ट रूप से mySQL क्लाइंट स्थानीय फ़ाइल के माध्यम से कनेक्ट करने का प्रयास करता है, जिसे लोकलहोस्ट के लिए लूपबैक एड्रेस (127.0.0.1) से कनेक्ट करने के बजाय सॉकेट कहा जाता है।

इस सॉकेट फ़ाइल का डिफ़ॉल्ट स्थान, कम से कम OSX पर है /tmp/mysql.sock

क्विक, कम से कम समाधान

सही सॉकेट ढूँढने में OS को मूर्ख बनाने के लिए एक सिम्लिंक बनाएँ।

ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp

प्रस्तावक समाधान

startMysql.shफ़ाइल में परिभाषित सॉकेट पथ को बदलें /Applications/MAMP/bin

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