मुझे `PDOException: SQLSTATE [HY000] [2002] ड्रश का उपयोग करते समय ऐसी कोई फ़ाइल या निर्देशिका नहीं मिली है [बंद]


21

मैंने पहली बार Drush स्थापित किया है (इसलिए यह एक कॉन्फ़िगरेशन त्रुटि हो सकती है) और मैं Drupal के नवीनतम मुख्य संस्करण को अपडेट करने का प्रयास कर रहा हूं।

ड्रश मुझे यह त्रुटि दे रहा है - मैं एक OSX बॉक्स पर हूं।

dev5:clientnamedirectory my.name$ drush pm-update projects drupal-7.25
<h1>Additional uncaught exception thrown while handling exception.</h1>

<h2>Original</h2><p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in drupal_get_installed_schema_version() (line 155 of /Users/my.name/Sites/proface/includes/install.inc).</p>

<h2>Additional</h2>

<p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in system_list() (line 165 of /Users/my.name/Sites/clientnamedirectory/includes/module.inc).</p><hr />

Drush command terminated abnormally due to an unrecoverable error.

1
क्या आपने इन चरणों को पूरा किया है ? मुझे पता है कि यह वास्तव में आपका मुद्दा नहीं हो सकता है, लेकिन यह मदद कर सकता है।
चपबाबू

आप कौन से संस्करण का उपयोग कर रहे हैं? ऐसा मुद्दा है जो आपके साथ समान प्रतीत होता है: drupal.org/node/832472
F1234k

मैं संस्करण drush-7.x-4.5 और drupal 7.9 का उपयोग कर रहा हूं
FLY

मैंने अपने प्रश्न के बाद जो चरण जोड़े हैं। इसी तरह के स्टैप्स की तरह आप @Chapabu
FLY

1
- आप एक PHP / MySQL कनेक्शन की समस्या (Drupal संबंधित नहीं है) stackoverflow.com/questions/2412009/...
क्लाइव

जवाबों:


42

इस तरह मैंने इसे macOS पर हल किया:

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

स्रोत: MAMP पर Drush के साथ कार्य करना


मेरे लिए यह mysql.sock फ़ाइल के लिए "/ tmp" में दिख रहा था। इसलिए मुझे अपने MAMP इनस्टॉल में एक सिमलिंक बनाना था। उस में चलने वाले किसी व्यक्ति के लिए बस FYI करें।
पैट्रिक

37

फ़ाइल सेटिंग्स में अपने डेटाबेस कॉन्फ़िगरेशन में, Drupal साइट के लिए। स्थानीय होस्ट के बजाय होस्ट को 127.0.0.1 में बदलने का प्रयास करें।

डिफ़ॉल्ट को बदलें: 'होस्ट' => 'लोकलहोस्ट'

साथ: 'होस्ट' => '127.0.0.1',

मेरे पास ओएस एक्स एक्सएएमपीपी पर यह त्रुटि है, लेकिन समाधान यहां भी लागू होना चाहिए। जैसा कि क्लाइव ने कहा है, इसका MySQL कनेक्शन मुद्दा है। इस पोस्ट में अंतर्निहित मुद्दे पर अधिक है।


नीट और सरल समाधान। यह एक प्रति-साइट के आधार पर काम करता है, हालांकि, लेकिन इसने यहां चाल बना दी।
इग्नासियो सेगुरा पोस्टिगो

अधिक लोकप्रिय जवाब मेरे लिए काम नहीं कर रहा है (मैं MAMP प्रो का उपयोग कर रहा हूं), लेकिन यह एक करता है। धन्यवाद!
केली करी

1
नहीं! यह काम करने के लिए Drush मिल सकता है ... लेकिन यह बाद में Drupal को विफल करने का कारण बनता है
sea26.2

11

व्याख्या

PDOException - त्रुटि 2002 मतलब है कि आपके Drush सॉकेट फ़ाइल (जैसे के माध्यम से MySQL स्थानीय डेटाबेस सर्वर से कनेक्ट नहीं कर सकते हैं /tmp/mysql.sock) अपने में विन्यस्त के रूप में php.ini

यह वास्तव में इसके से संबंधित नहीं drushहै-स्व, यह आपका PHP कॉन्फ़िगरेशन है और इस त्रुटि को पुन: प्रस्तुत किया जा सकता है:

php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

ठीक कर

यदि आपका MySQL सही ढंग से काम करता है, तो सुनिश्चित करें कि ये दो फाइलें हैं:

  1. mysql_config --socket

    या: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

    या: php -r 'phpinfo();' | grep -w default_socket

मिलान और एक ही फ़ाइल को इंगित करता है और वे दोनों मौजूद हैं।

यदि नहीं, तो जांच लें कि कौन सा सही है:

mysql --socket=/path/to/mysql.sock

फिर निम्नलिखित में से किसी एक समस्या का समाधान करें:

  • काम करने वाले mysql.sockयूनिक्स सॉकेट (एमएमपी के लिए, एंड्रयू जवाब देखें ) को इंगित करने के लिए प्रतीकात्मक लिंक बनाएं ,

    • उदाहरण के लिए, यदि आप MAMP का उपयोग कर रहे हैं, तो आप डिफ़ॉल्ट स्थान पर एक प्रतीकात्मक लिंक बना सकते हैं:

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • आपका pdo_mysql.default_socket, mysql.default_socketया mysqli.default_socketआप का सही मार्गphp.ini

  • अपने चर unix_socketमें अपने settings.phpमें निर्दिष्ट करें $databases, उदा

    $databases['default']['default'] = array(
      // ...
      'unix_socket' => '/var/mysql/mysql.sock',

समस्या निवारण

अन्य धार-मामले हो सकते हैं:

  • गलत अनुमतियाँ (उदाहरण के लिए मूल फ़ोल्डर),
  • आप अंतरिक्ष से बाहर हैं,
  • आपके पास कई PHP संस्करण हैं, जांचें कि आप वास्तव में किसका उपयोग कर रहे हैं और आप कौन से कॉन्फिगर बदल रहे हैं,
  • XDebug के साथ डिबग करें:

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • या xdebug.show_exception_trace=1अपने में सेटxdebug.ini
  • डीबग: ओएस एक्स के साथ sudo dtruss -fn mysqld, लिनक्स परstrace
  • यह भी देखें: MySQL कनेक्शन काम नहीं कर रहा है: 2002 SO पर ऐसी कोई फ़ाइल या निर्देशिका नहीं है

6

मैं MAMP प्रो का उपयोग कर रहा हूं और यह एक ही मुद्दा था। सबसे आसान तरीका है कि मैं इसे ठीक करने के लिए सेटिंग में अपने $ डेटाबेस सरणी में निम्न पंक्ति जोड़ सकता हूं। पीएफ फ़ाइल।

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

पूर्ण रूप से यह इस तरह दिखना चाहिए:

$databases = array (
    'default' =>
     array (
        'default' =>
        array (
            'database' => 'your_database_name',
            'username' => 'username',
            'password' => 'password',
            'host' => 'localhost',
            'port' => '',
            'driver' => 'mysql',
            'prefix' => '',
            'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        ),
    ),
);

सटीक त्रुटि मुझे इस तरह दिख रही थी:

अपवाद को संभालते हुए अतिरिक्त नया अपवाद प्राप्त हुआ।

मूल

PDOException: SQLSTATE [HY000] [2002] drupal_is_denied () (लाइन 2193 ऑफ ... में ऐसी कोई फ़ाइल या निर्देशिका नहीं है

अतिरिक्त

PDOException: SQLSTATE [HY000] [2002] _registry_check_code () (लाइन 3477 ऑफ ... में ऐसी कोई फ़ाइल या निर्देशिका नहीं है


एक अपरिवर्तनीय त्रुटि के कारण ड्रश कमांड को असामान्य रूप से समाप्त कर दिया गया।


2
यह MAMP
ant

3

मैंने इसे निम्न चरणों के साथ हल किया, पिछले उत्तरों के समान लेकिन समान नहीं।

एक सिमलिंक जोड़ें:

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

उपयोग की जा रही php.ini खोजें:

php -i | grep php.ini

निम्नलिखित सेटिंग्स को php.ini में जोड़ें:

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

1

यह आपके PHP / SQL कॉन्फ़िगरेशन में कॉन्फ़िगरेशन त्रुटि के कारण है। कहीं वह सॉकेट जो आपके वेबसर्वर का उपयोग करता है और कमांड लाइन का उपयोग अलग-अलग तरीके से कॉन्फ़िगर किया गया है। मैं आपके MySQL कॉन्फ़िगरेशन की जाँच करने की सलाह देता हूं कि यह देखने के लिए कि यूनिक्स सॉकेट उपयोग में क्या है, और फिर सुनिश्चित करें कि सभी php.ini कॉन्फ़िगरेशन और संकलन में समान मूल्य का उपयोग किया जाता है।

यदि आप कॉन्फ़िगरेशन को ठीक नहीं कर सकते हैं तो निम्न चरणों में काम करना चाहिए:

  1. Drush 5.x (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz) का विकास संस्करण प्राप्त करें और इसके बजाय इसे स्थापित करें। यह अन्य मुद्दों का कारण हो सकता है, लेकिन कुल मिलाकर इसकी बहुत स्थिर है।
  2. अपनी Drupal साइट्स सेटिंग में। डेटाबेस कनेक्शन के लिए होस्ट और पोर्ट सेटिंग्स को हटा दें और उन्हें बदलने के लिए 'unix_socket' => '/path/to/mysql.sock' में जोड़ें।

यदि यह सब जटिल लगता है, तो एक विकल्प यह है कि होस्ट को सेटिंग में बदल दिया जाए। लोकलहोस्ट से 127.0.0.1 तक। यह साइट को धीमा कर देगा, लेकिन एक विकास साइट के लिए यह ध्यान देने योग्य या महत्वपूर्ण नहीं हो सकता है। एक उत्पादन साइट के लिए आप यूनिक्स सॉकेट का उपयोग करना चाहते हैं और कॉन्फ़िगरेशन को सुलझाना चाहिए।


यह वास्तव में यह क्या करता है। मैंने इसका अनगिनत बार परीक्षण किया है।
15

1

मैक पर ड्रश स्थापित करने का एक आसान / वैकल्पिक तरीका मिला:

एक स्टैंड अकेले टर्मिनल में इसे चिपकाकर होमब्रे स्थापित करें

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

फिर एक ही टर्मिनल से निम्नलिखित चलाकर ड्रश जोड़ें

brew install drush

रनिंग ड्रश स्टेटस अब ठीक चलता है।


1

यदि आप MySQL.com की स्थापना MySQL.com के साथ कर रहे हैं, तो आपको .sockफ़ाइल के लिए सही स्थान पर PHP को इंगित करना होगा ।

अपने में php.ini, इन दो पंक्तियों को जोड़ें / संशोधित करें:

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

अपने php.ini का स्थान खोजने के लिए (यह अभी तक मौजूद नहीं हो सकता है), इसका उपयोग करें

php -i | grep php.ini

यदि php.iniफ़ाइल अभी तक वहां मौजूद नहीं है, तो इसे बनाएं।


0

अन्य उत्तरों से सहमत हैं कि Drupal को mysql सॉकेट नहीं मिल सकता है। अन्य उत्तरों ने मेरी मदद की लेकिन आधिकारिक ओरेकल मैसकल सेवा स्थापित करने के लिए अधूरा था। अर्थात्, mysql.sock फ़ाइल का डिफ़ॉल्ट स्थान। तो यहाँ आपके उपयोग के मामले के आधार पर मेरे सुझाए गए उत्तरों की पुनरावृत्ति है:

यदि आधिकारिक MAMP पैकेज द्वारा mysql का उपयोग किया जाता है, तो @Andrew Alexander's जवाब का उपयोग करें:

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

आधिकारिक ओरेकल MYSQL के लिए:

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

0

MAMP 4 सेटअप के लिए, समाधान "इस संस्करण को कमांड लाइन पर उपलब्ध कराएं" जाँच रहा था।

MAMP कॉन्फ़िगरेशन


0

मुझे टर्मिनल में निम्नलिखित संदेश मिला:

(MAMP PRO + PHP 7)

ब्लॉकचोट ड्रश कमांड को एक अपरिवर्तनीय त्रुटि के कारण असामान्य रूप से समाप्त कर दिया गया।
[त्रुटि] PDOException: SQLSTATE [HY000] [२००२] Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService () में कोई ऐसी फ़ाइल या निर्देशिका नहीं है

मैंने इन निर्देशों की मदद से समस्या को हल किया


0

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

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.