YII2 出現Database Exception – yii\db\Exception  SQLSTATE[HY000] [2002] No such file or dir

YII2進行MYSQL數據庫操作時出現Database Exception – yii\db\Exception  SQLSTATE[HY000] [2002] No such file or directory錯誤的解決方法

在進行數據庫操作時出現如下類似錯誤,實際則是PHP配置文件php.ini中未指定mysql.sock(或mysqld.sock)文件路徑導致的PDO無法鏈接數據庫

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 579

這個是由於 通常我們在參考 教程在 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也修改一下

解決方法 就是
vim usr/local/php/etc/php.ini


把以下三個原來空白的值都設置爲 /tmp/mysql.sock(或/tmp/mysqld.sock)具體位置請替換成你實際安裝mysql數據庫時的實際mysql.sock(或mysqld.sock)文件地址

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

使用mysqld引擎的數據庫應修改爲如下設置

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對應的路徑值複製出來即可

mysql
MySQL Support    enabled
Active Persistent Links    0
Active Links    0
Client API version    5.6.17
MYSQL_MODULE_TYPE    external
MYSQL_SOCKET    /tmp/mysqld.sock
MYSQL_INCLUDE    -I/usr/local/mysql/include
MYSQL_LIBS    -L/usr/local/mysql/lib -lmysqlclient


可以看出我使用的是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數據庫)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章