SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีผิดพลาด


14

มีข้อผิดพลาดในการประมวลผลคำขอของคุณ

SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

รับข้อผิดพลาดข้างต้นโปรดให้คนแก้ปัญหาในการแก้ปัญหานี้


ฉันแก้ไขโดยการเปลี่ยนสตริงการเชื่อมต่อให้แน่ใจว่า mysql ของคุณเปิดอยู่และคุณมีตารางทั้งหมดอยู่ในฐานข้อมูล
Touqeer Shafi

คำตอบ:


12

ฉันมีปัญหาเดียวกันขณะติดตั้ง Magento 2.1.0 ด้วย PHP 7.0.13
ฉันสามารถแก้ไขปัญหานี้โดยการตั้งค่าฐานข้อมูลชื่อโฮสต์เป็น127.0.0.1แทนlocalhost


สิ่งนี้ควรทำที่ไหน?
joeybab3

ภายใน ./app/etc/env.php
Jino

10

ถ้าเซิร์ฟเวอร์ของคุณอยู่ใน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 ใหม่



2

สิ่งนี้สามารถเกิดขึ้นได้หากระบบไฟล์ของคุณเต็ม ... df -h อันดับที่ 1 ... ของหลักสูตรส่วนใหญ่คุณจะได้รับการแจ้งเตือนก่อนหน้านั้น ...

mysqld จะไม่ทำงานตามปกติและจะอยู่ในโหมด "ปลอดภัย"

HTH SNS



1

นี่น่าจะเป็นปัญหารุ่น PHP ผิดคุณต้องเลือก php ที่ต้องใช้เพื่อรันคำสั่งดังนี้:

/Applications/MAMP/bin/php/php7.1.20/bin/php bin/magento setup:upgrade

PS: ตัวอย่างข้างต้นสำหรับ MAC คุณสามารถทำแบบเดียวกันกับ windows หรือ unix ได้เช่นกัน


0

ตรวจสอบให้แน่ใจว่าคุณแก้ไขแอพ / etc / local.xml ของคุณอย่างถูกต้อง หากคุณไม่มีคำนำหน้าสำหรับตารางของคุณตรวจสอบให้แน่ใจว่าบรรทัดที่ถูกต้องคือ:

<table_prefix><![CDATA[]]></table_prefix>

ไม่

<table_prefix>{{db_prefix}}</table_prefix>

0

สิ่งนี้มักเกิดจากอินสแตนซ์อื่นของ PHP ที่ใช้โดยบรรทัดคำสั่ง PHP เปรียบเทียบกับเว็บเซิร์ฟเวอร์ โดยเฉพาะอย่างยิ่งmysql.sockอาจมีการกำหนดค่าผิดถ้าเป็นกรณีนี้

ในการตรวจสอบว่าคุณใช้ PHP หนึ่งอินสแตนซ์หรือไม่:

  1. เข้าสู่เซิร์ฟเวอร์ Magento ของคุณ
  2. ป้อนคำสั่งต่อไปนี้:

    php -i | grep 'php.ini'

สิ่งนี้กำหนดการตั้งค่าที่ใช้โดยอินเตอร์เฟสบรรทัดคำสั่ง (CLI) PHP หมายเหตุที่php.iniตั้งอยู่

  1. หากคุณยังไม่ได้ดำเนินการตั้งค่าphpinfo.phpเว็บเซิร์ฟเวอร์ของคุณ
  2. เปรียบเทียบค่าของการตั้งค่าไฟล์โหลดจากหนึ่งจากphpinfo.phpphp -i

phpinfo.phpแสดงphp.iniไฟล์ที่ใช้โดยเว็บเซิร์ฟเวอร์ของคุณ ถ้ามันแตกต่างจากสิ่งที่อยู่ใน PHP php.iniคุณต้องทำการตั้งค่า PHP ทั้งหมดให้สอดคล้องกับทั้ง PHP CLI และเว็บเซิร์ฟเวอร์

สำหรับรายละเอียดเพิ่มเติมโปรดดูเอกสารที่ให้มาพร้อมกับเว็บเซิร์ฟเวอร์ของคุณ


สิ่งนี้สามารถเกิดขึ้นได้ - ฉันคิดว่าฉันกำลังเผชิญกับสิ่งนี้ในตอนนี้ แต่ทำไม มีแนวคิดเฉพาะใดเกี่ยวกับสิ่งที่ต้องตรวจสอบในไฟล์ ini เหล่านี้หรือไม่
VladFr

4
ค่อนข้างคุณอาจให้ความอนุเคราะห์แก่หน้านี้devdocs.magento.com/guides/v2.0/install-gde/trouble/php/…
Shan

0

ฉันมี 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


0

ฉันได้รับข้อผิดพลาดเดียวกัน "SQLSTATE [HY000] [2002] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" และพบว่าบริการ MySQL หยุดทำงาน ฉันเริ่มบริการ MySQL และทำงานได้ดี


0

คุณต้องเปลี่ยนชื่อโฮสต์จาก localhost เป็น 127.0.0.1 ในไฟล์การกำหนดค่า env ในไดเรกทอรีรากของวีโอไอพี

  • เปิดแอพ / etc / env.php
  • เปลี่ยน 'host' => 'localhost' เป็น 'host' => '127.0.0.1'
  • บันทึกไฟล์และลองอีกครั้ง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.