SQLSTATE[HY000] [2002] No such file or directory
原因是找不到mysql.sock這個文件。。一般出現的症狀就是能用ip連接mysql.但不能使用localhost連接本機的mysql
解決方法:
find / -name ‘mysql.sock’ 查找一下本機這個文件在哪里
修改php.ini文件里面:
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 -u root -p
mysql>show variables like '%sock%';
+-----------------------------------------+---------------------------+
| Variable_name | Value |
+-----------------------------------------+---------------------------+
| performance_schema_max_socket_classes | 10 |
| performance_schema_max_socket_instances | -1 |
| socket | /var/mysql/mysql.sock |
+-----------------------------------------+---------------------------+
3 rows in set (0.00 sec)
如果不socket的位置和你實際位置不一樣。可以使用ln命令進行鏈接一下
例如:ln -s /tmp/mysql.sock /var/mysql/mysql.sock
修改完成后 重啟apache 或者NGINX下重啟php-fpm 即可解決問題
注:實際上Yii2所使用的PDO鏈接數據庫,之修改設定pdo_mysql.default_socket 一項的配置文件路徑即可,但考慮到后續使用和其他一些應用場合,就索性連同mysql,mysqli的socket路徑一同設置修改了(修改設置路徑地址 必須為mysql_socket所在實際文件路徑地址,否則將導致PHP無法正常鏈接使用MYSQL數據庫)……