YII2進行MYSQL數據庫操做時出現Database Exception – yii\db\Exception SQLSTATE[HY000] [2002] No such file or directory錯誤的解決方法php
在進行數據庫操做時出現以下相似錯誤,實際則是PHP配置文件php.ini中未指定mysql.sock(或mysqld.sock)文件路徑致使的PDO沒法連接數據庫java
Database Exception – yii\db\Exception
SQLSTATE[HY000] [2002] No such file or directory
↵
Caused by: PDOException
SQLSTATE[HY000] [2002] No such file or directory
in /var/www/yii2/vendor/yiisoft/yii2/db/Connection.php at line 579mysql
這個是因爲 一般咱們在參考 教程在 MAC OS LINUX下安裝 MYSQL 時,
默認將PHP.ini 中的如下三項留空致使的YII2所需的PDO組建沒法找到mysql.sock(或mysqld.sock)文件地址致使的
mysql.default_socket =
pdo_mysql.default_socket=
mysqli.default_socket =
而沒有把另外兩個YII 框架須要調用到的模塊的default_socket也修改一下sql
解決方法 就是
vim usr/local/php/etc/php.ini數據庫
把如下三個原來空白的值都設置爲 /tmp/mysql.sock(或/tmp/mysqld.sock)具體位置請替換成你實際安裝mysql數據庫時的實際mysql.sock(或mysqld.sock)文件地址apache
mysql.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket= /tmp/mysql.sock
mysqli.default_socket =/tmp/mysql.sockvim
使用mysqld引擎的數據庫應修改成以下設置yii2
mysql.default_socket = /tmp/mysqld.sock
pdo_mysql.default_socket= /tmp/mysqld.sock
mysqli.default_socket =/tmp/mysqld.sock框架
若是你不知道本身使用的是mysql.sock仍是mysqld.sock文件,或者不知道mysql_socket文件的位置,打開phpinfo() 函數信息頁面找到以下PHP擴展中MYSQL擴展所在位置,找到裏面的MYSQL_SOCKET對應的路徑值複製出來便可yii
能夠看出我使用的是mysqld.sock 文件,所以我php.ini中關於數據庫的配置修改以下:
mysql.default_socket = /tmp/mysqld.sock
pdo_mysql.default_socket= /tmp/mysqld.sock
mysqli.default_socket =/tmp/mysqld.sock
修改完成後 重啓apache 或者NGINX下重啓php-fpm 便可解決問題
注:實際上Yii2所使用的PDO連接數據庫,之修改設定pdo_mysql.default_socket 一項的配置文件路徑便可,但考慮到後續使用和其餘一些應用場合,就索性連同mysql,mysqli的socket路徑一同設置修改了(修改設置路徑地址 必須爲mysql_socket所在實際文件路徑地址,不然將致使PHP沒法正常連接使用MYSQL數據庫)……轉載連接:https://blog.csdn.net/zqtsx/java/article/details/41845511