ThinkPHP下PDO連接數(shù)據(jù)庫(kù)報(bào)錯(cuò)出現(xiàn)“PDO->__construct(‘mysql:host=localhost…’”(SQLSTATE[HY000] [2002])
[重要通告]如您遇疑難雜癥,本站支持知識(shí)付費(fèi)業(yè)務(wù),掃右邊二維碼加博主微信,可節(jié)省您寶貴時(shí)間哦!
前幾天有個(gè)客戶說(shuō)他裝的ThinkPHP框架的站點(diǎn),過(guò)一段時(shí)間就崩了~~出現(xiàn)一系列的錯(cuò)誤,先出現(xiàn)的是(SQLSTATE[HY000] [2002])
過(guò)一點(diǎn)時(shí)間又出現(xiàn)“PDO->__construct(‘mysql:host=localhost…’” 如下圖
關(guān)于SQLSTATE[HY000] [2002]? ?ThinkPHP或者mysql出現(xiàn)“SQLSTATE[HY000]: General error: 1030 Got error 28 from storage engine”的解決辦法
出現(xiàn)SQLSTATE[HY000] [2002] ,這問(wèn)題也不一定是單一的問(wèn)題,來(lái)分析一下;
PDO連接數(shù)據(jù)庫(kù)報(bào)錯(cuò):“SQLSTATE[HY000] [2002] No such file or directory”。
出現(xiàn)這個(gè)問(wèn)題的原因是PDO無(wú)法找到mysql.sock或者mysqld.sock
PDO連接數(shù)據(jù)庫(kù)報(bào)錯(cuò)解決方法1:
找到相應(yīng)的.sock文件,并設(shè)置php.ini文件中的pdo_mysql.default_socket的值為.sock文件的路徑。
pdo_mysql.default_socket= /tmp/mysqld.sock
然后重啟Apache,或者nginx下重啟php-fpm即可。
PDO連接數(shù)據(jù)庫(kù)報(bào)錯(cuò)解決方法2:(我是用這種方法解決,簡(jiǎn)單省力)
將PDO連接中的dsn的host由“l(fā)ocalhost”改為“127.0.0.1”即可
解惑:WordPress在數(shù)據(jù)庫(kù)連接使用127.0.0.1與localhost對(duì)數(shù)據(jù)庫(kù)連接速度的影響
延伸閱讀:用localhost連接MySQL和127.0.0.1有什么區(qū)別呢?
在我們印象中這兩個(gè)都可以訪問(wèn)到本地的服務(wù),但是本質(zhì)上有什么區(qū)別的?
host=127.0.0.1,使用 TCP連接,mysql server會(huì)認(rèn)為這個(gè)連接來(lái)自127.0.0.1這個(gè)IP或者localhost.localdomin這個(gè)域名。
host=localhost,不使用TCP連接,它使用Unix socket連接mysql服務(wù)
以上是這兩種host連接區(qū)別的簡(jiǎn)單總結(jié),知道了這個(gè)區(qū)別,當(dāng)php用localhost去連接mysql的時(shí)候,它該用哪個(gè)socket呢?大家都知道m(xù)ysql服務(wù)啟動(dòng)后它的進(jìn)程里有一個(gè)--socket=/var/lib/mysql/mysql.sock的參數(shù)(大家的地址和我的可能會(huì)不相同,這個(gè)可以在mysq.cnf中進(jìn)行設(shè)置),其中這個(gè)mysql.sock就是要用到的socket,我們只要把這個(gè)完整地址告訴php就可以,告訴的方式就是修改php.ini
pdo_mysql.default_socket=? 這項(xiàng)是否有配置或者配置是否正確
設(shè)置好以后重啟php-fpm就大功告成了。
問(wèn)題未解決?付費(fèi)解決問(wèn)題加Q或微信 2589053300 (即Q號(hào)又微信號(hào))右上方掃一掃可加博主微信
所寫(xiě)所說(shuō),是心之所感,思之所悟,行之所得;文當(dāng)無(wú)敷衍,落筆求簡(jiǎn)潔。 以所舍,求所獲;有所依,方所成!