ฉันมี 'PDOException: SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว "เมื่อใช้ drush [ปิด]


21

ฉันติดตั้ง Drush เป็นครั้งแรก (ดังนั้นอาจเป็นข้อผิดพลาดในการกำหนดค่า) และฉันพยายามอัปเดตเป็น Drupal เวอร์ชันหลักล่าสุด

Drush ให้ข้อผิดพลาดนี้กับฉัน - ฉันอยู่ในกล่อง 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
คุณทำตามขั้นตอนเหล่านี้แล้วหรือยัง? ฉันรู้ว่าอาจไม่ใช่ปัญหาของคุณ แต่อาจช่วยได้
Chapabu

คุณกำลังใช้ Drush รุ่นใด มีปัญหาที่ดูเหมือนจะเป็นของคุณเหมือนกัน: drupal.org/node/832472
F1234k

ฉันใช้รุ่น drush-7.x-4.5 และ drupal 7.9
FLY

เพิ่มขั้นตอนที่ฉันทำตามคำถามของฉัน ตะเข็บเหมือนขั้นตอนที่คล้ายคลึงกันคุณกำลังประสบความสำเร็จ @Chapabu
FLY

1
คุณมีปัญหาการเชื่อมต่อ PHP / MySQL (ไม่เกี่ยวข้องกับ Drupal) - stackoverflow.com/questions/2412009/…
Clive

คำตอบ:


42

นี่คือวิธีที่ฉันแก้ไขบน macOS:

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

ที่มา: การทำงานกับ Drush บน MAMP


สำหรับฉันมันกำลังมองหาใน "/ tmp" สำหรับไฟล์ mysql.sock ดังนั้นฉันต้องสร้าง symlink ที่นั่นเพื่อติดตั้ง MAMP ของฉัน เพียงแค่ FYI สำหรับทุกคนที่พบเจอ
Patrick

37

ในการกำหนดค่าฐานข้อมูลของคุณในไฟล์ settings.php สำหรับเว็บไซต์ Drupal ลองเปลี่ยนโฮสต์เป็น 127.0.0.1 แทน localhost

แทนที่ค่าเริ่มต้น: 'host' => 'localhost',

ด้วย: 'host' => '127.0.0.1',

ฉันมีข้อผิดพลาดนี้ใน OS X XAMPP แต่วิธีแก้ไขควรใช้ที่นี่ด้วย ดังที่ไคลฟ์กล่าวถึงปัญหาการเชื่อมต่อของ MySQL โพสต์นี้มีเพิ่มเติมเกี่ยวกับปัญหาพื้นฐาน


ทางออกที่ดีและเรียบง่าย มันทำงานบนพื้นฐานต่อเว็บไซต์ แต่มันทำเคล็ดลับที่นี่
Ignacio Segura Postigo

คำตอบที่ได้รับความนิยมไม่สามารถใช้ได้กับฉัน (ฉันใช้ MAMP Pro) แต่คำตอบนี้ใช้ได้ ขอบคุณ!
เคลลี่แกงกะหรี่

1
No! สิ่งนี้อาจทำให้ Drush ทำงาน ... แต่ต่อมาทำให้ Drupal ล้มเหลว
ทะเล 26.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, ดูคำตอบของ Andrew )

    • ตัวอย่างเช่นหากคุณใช้ 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
  • แก้ไขข้อบกพร่อง: บน OS X ด้วยsudo dtruss -fn mysqld, บน Linux ด้วยstrace
  • ดูเพิ่มเติมที่: การเชื่อมต่อ MySQL ไม่ทำงาน: 2002 ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวที่ SO

6

ฉันใช้ MAMP Pro และมีปัญหาเดียวกันนี้ วิธีที่ง่ายที่สุดที่ฉันสามารถแก้ไขได้คือการเพิ่มบรรทัดต่อไปนี้ลงในอาร์เรย์ $ ฐานข้อมูลของคุณในไฟล์ settings.php

'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 จาก ...


คำสั่ง Drush ยกเลิกอย่างผิดปกติเนื่องจากข้อผิดพลาดที่ไม่สามารถกู้คืนได้


2
นี่เป็นการแก้ไขที่เร็วและง่ายที่สุดสำหรับฉันโดยใช้ MAMP
ant

3

ฉันแก้ไขมันด้วยขั้นตอนต่อไปนี้คล้ายกับคำตอบก่อนหน้า แต่ไม่เหมือนกัน

เพิ่ม symlink:

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 sites settings.php ให้ลบการตั้งค่าโฮสต์และพอร์ตสำหรับการเชื่อมต่อฐานข้อมูลและเพิ่มใน 'unix_socket' => '/path/to/mysql.sock' เพื่อแทนที่

หากสิ่งนี้ดูเหมือนว่าจะซับซ้อนทางเลือกคือการเปลี่ยนโฮสต์ใน setting.php จาก localhost เป็น 127.0.0.1 สิ่งนี้จะทำให้ไซต์ช้าลง แต่สำหรับไซต์พัฒนาอาจไม่สามารถสังเกตเห็นได้หรือสำคัญ สำหรับไซต์ที่ใช้งานจริงคุณต้องการใช้ซ็อกเก็ต unix และควรจัดเรียงการกำหนดค่า


นี่คือสิ่งที่มันทำ ฉันได้ทดสอบมันนับครั้งไม่ถ้วน
asiby

1

ค้นพบวิธีที่ง่ายกว่า / ทางเลือกในการติดตั้ง drush บน Mac:

ติดตั้งhomebrewโดยการวางสิ่งนี้ในเทอร์มินัลแบบสแตนด์อะโลน

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

จากนั้นเพิ่ม drush โดยเรียกใช้สิ่งต่อไปนี้จากเทอร์มินัลเดียวกัน

brew install drush

วิ่งสถานะ drush ทำงานได้ดีในขณะนี้


1

หากคุณกำลังทำงานกับการติดตั้ง MySQL.com ของ MySQL คุณเพียงแค่ชี้ PHP ไปยังตำแหน่งที่เหมาะสมสำหรับ.sockไฟล์

ในของคุณ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 คำตอบอื่น ๆ ช่วยฉัน แต่ไม่สมบูรณ์สำหรับการติดตั้งด้วยบริการ Oracle Mysql อย่างเป็นทางการ กล่าวคือตำแหน่งเริ่มต้นของไฟล์ mysql.sock ดังนั้นนี่คือสรุปคำตอบที่แนะนำของฉันขึ้นอยู่กับกรณีการใช้งานของคุณ:

หากใช้ mysql ซึ่งรวมอยู่ในแพ็คเกจ MAMP อย่างเป็นทางการให้ใช้ @Andrew คำตอบของ Alexander:

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

สำหรับ Oracle MYSQL อย่างเป็นทางการ:

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

0

สำหรับการตั้งค่า MAMP 4 โซลูชันกำลังตรวจสอบ "ทำให้รุ่นนี้พร้อมใช้งานในบรรทัดคำสั่ง"

การกำหนดค่า MAMP


0

ฉันได้รับข้อความต่อไปนี้ใน terminal:

(MAMP PRO + PHP 7)

คำสั่ง Blockquote Drush ถูกยกเลิกอย่างผิดปกติเนื่องจากข้อผิดพลาดที่ไม่สามารถกู้คืนได้
[ข้อผิดพลาด] PDOException: SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวใน Drupal \ Component \ DependencyInject \ PhpArrayContainer-> createService () Blockquote

ฉันแก้ไขปัญหาด้วยความช่วยเหลือของคำแนะนำเหล่านี้


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