มีข้อผิดพลาดในการประมวลผลคำขอของคุณ
SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
รับข้อผิดพลาดข้างต้นโปรดให้คนแก้ปัญหาในการแก้ปัญหานี้
มีข้อผิดพลาดในการประมวลผลคำขอของคุณ
SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
รับข้อผิดพลาดข้างต้นโปรดให้คนแก้ปัญหาในการแก้ปัญหานี้
คำตอบ:
ถ้าเซิร์ฟเวอร์ของคุณอยู่ในapp/etc/local.xml
เป็นlocalhost
และความผิดพลาดนี้จะปรากฏในบันทึกข้อผิดพลาดวีโอไอพี แต่วีโอไอพียังคงทำงาน ok แล้ว MySQL ก็เริ่มและซ็อกเก็ต/tmp/mysql.sock
หรืออะไรก็ตามไฟล์ซ็อกเก็ตตั้งขึ้นในmy.cnf
หายไปชั่วคราว
เนื่องจากไม่มีตัวเชื่อมต่อ PDO mysql รายงาน SQLSTATE[HY000] [2002] No such file or directory
หากคุณได้รับข้อผิดพลาดนี้อย่างต่อเนื่องและไม่สามารถเข้าถึง Magento นอกเหนือจากหน้าข้อผิดพลาดข้อยกเว้น mysql จึงล้มเหลวอย่างสมบูรณ์และคุณต้องการผู้ให้บริการโฮสต์ของคุณเพื่อค้นหาสาเหตุและเริ่ม mysql ใหม่
ตั้งค่าชื่อโฮสต์ฐานข้อมูลเป็น 127.0.0.1 แทน localhost
สิ่งนี้สามารถเกิดขึ้นได้หากระบบไฟล์ของคุณเต็ม ... df -h อันดับที่ 1 ... ของหลักสูตรส่วนใหญ่คุณจะได้รับการแจ้งเตือนก่อนหน้านั้น ...
mysqld จะไม่ทำงานตามปกติและจะอยู่ในโหมด "ปลอดภัย"
HTH SNS
ฉันมีปัญหาเดียวกันนี้และฉันใช้ด้านล่างเพื่อเลือก php ที่ต้องใช้ /usr/local/etc/php/7.2/bin/php bin/magento setup:di:compile
ดูเอกสารอย่างเป็นทางการ: SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
นี่น่าจะเป็นปัญหารุ่น PHP ผิดคุณต้องเลือก php ที่ต้องใช้เพื่อรันคำสั่งดังนี้:
/Applications/MAMP/bin/php/php7.1.20/bin/php bin/magento setup:upgrade
PS: ตัวอย่างข้างต้นสำหรับ MAC คุณสามารถทำแบบเดียวกันกับ windows หรือ unix ได้เช่นกัน
ตรวจสอบให้แน่ใจว่าคุณแก้ไขแอพ / etc / local.xml ของคุณอย่างถูกต้อง หากคุณไม่มีคำนำหน้าสำหรับตารางของคุณตรวจสอบให้แน่ใจว่าบรรทัดที่ถูกต้องคือ:
<table_prefix><![CDATA[]]></table_prefix>
ไม่
<table_prefix>{{db_prefix}}</table_prefix>
สิ่งนี้มักเกิดจากอินสแตนซ์อื่นของ PHP ที่ใช้โดยบรรทัดคำสั่ง PHP เปรียบเทียบกับเว็บเซิร์ฟเวอร์ โดยเฉพาะอย่างยิ่งmysql.sock
อาจมีการกำหนดค่าผิดถ้าเป็นกรณีนี้
ในการตรวจสอบว่าคุณใช้ PHP หนึ่งอินสแตนซ์หรือไม่:
ป้อนคำสั่งต่อไปนี้:
php -i | grep 'php.ini'
สิ่งนี้กำหนดการตั้งค่าที่ใช้โดยอินเตอร์เฟสบรรทัดคำสั่ง (CLI) PHP หมายเหตุที่php.ini
ตั้งอยู่
phpinfo.php
เว็บเซิร์ฟเวอร์ของคุณphpinfo.php
php -i
phpinfo.php
แสดงphp.ini
ไฟล์ที่ใช้โดยเว็บเซิร์ฟเวอร์ของคุณ ถ้ามันแตกต่างจากสิ่งที่อยู่ใน PHP php.ini
คุณต้องทำการตั้งค่า PHP ทั้งหมดให้สอดคล้องกับทั้ง PHP CLI และเว็บเซิร์ฟเวอร์
สำหรับรายละเอียดเพิ่มเติมโปรดดูเอกสารที่ให้มาพร้อมกับเว็บเซิร์ฟเวอร์ของคุณ
ฉันมี PHP หลายเวอร์ชันสำหรับฉันผ่านเชลล์ - พิมพ์phpและแท็บการกดแสดงรายการที่การเติมข้อความอัตโนมัติของฉันรู้
สำหรับฉัน PHP 5.4, 5.5 และ 5.6 ทำงานได้ดี แต่ PHP 7 ไม่พบ mysql.sock และขัดข้องกับ"SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีผิดพลาด" ที่กล่าวถึงในคำถามนี้ .
# Prints [ok]
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-5.6.20
# Prints [error] and shows a warning
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-7.0.8
เพื่อดูว่าเซิร์ฟเวอร์ mysql ของคุณมีซ็อกเก็ตอยู่ที่ใดให้ใช้คำสั่งนี้:
cat /etc/mysql/my.cnf | grep socket
ในกรณีของฉันด้วยการติดตั้ง Percona Mysql ในระบบคนจรจัดของฉันไฟล์ซ็อกเก็ตถุงเท้าเกิดขึ้นที่นี่:
/var/run/mysqld/mysqld.sock
(สังเกตว่ามันถูกเรียกว่าmysqldไม่ใช่แค่mysql )
ฉันมี php หลายรุ่นให้เลือกและคำสั่งเหล่านี้แสดงให้ฉันเห็นว่าอันไหนมีปัญหาและอันไหนดี:
คำตอบสำหรับฉันคือการรวมรหัสในสคริปต์ผู้จัดเตรียมคนจรจัดเพื่อสร้าง symlink ระหว่าง /tmp/mysql.sock และ /var/run/mysqld/mysqld.sock
if [ ! -L /tmp/mysql.sock ]; then
echo "Creating symbolic link for php 7 to connect to mysql.sock"
ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
fi
เมื่อใช้ symlink ใหม่สคริปต์ทดสอบที่ให้ไว้ก่อนหน้านี้จะทำงานได้อย่างสมบูรณ์สำหรับ PHP ทุกเวอร์ชันและฉันสามารถใช้localhostในรหัสของฉันแทนที่จะต้องให้ที่อยู่ IP 127.0.0.1
ฉันได้รับข้อผิดพลาดเดียวกัน "SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" และพบว่าบริการ MySQL หยุดทำงาน ฉันเริ่มบริการ MySQL และทำงานได้ดี
คุณต้องเปลี่ยนชื่อโฮสต์จาก localhost เป็น 127.0.0.1 ในไฟล์การกำหนดค่า env ในไดเรกทอรีรากของวีโอไอพี