問(wèn)題
幫朋友安裝typecho博客羹幸,環(huán)境是CentOS7勇吊、Nginx1.17、php5顽决、mysql5.7短条。typecho安裝過(guò)程中出現(xiàn)如下問(wèn)題:
對(duì)不起,無(wú)法連接數(shù)據(jù)庫(kù),請(qǐng)先檢查數(shù)據(jù)庫(kù)配置再繼續(xù)進(jìn)行安裝?
由于typecho不打印詳細(xì)的php報(bào)錯(cuò),所以同樣是“無(wú)法連接數(shù)據(jù)庫(kù)”才菠,原因卻千差萬(wàn)別茸时。因此在這里整理一下排錯(cuò)步驟,方便遇到同樣問(wèn)題的同學(xué)赋访,找到自己出問(wèn)題的原因可都。
排錯(cuò)步驟
1.確認(rèn)是否是 數(shù)據(jù)庫(kù)信息填寫(xiě)錯(cuò)誤
最容易想到的報(bào)錯(cuò)原因,就是在install界面填寫(xiě)的數(shù)據(jù)庫(kù)配置信息不對(duì)蚓耽。檢查一下渠牲,在typecho安裝頁(yè)面,填寫(xiě)的數(shù)據(jù)庫(kù)名稱田晚、數(shù)據(jù)庫(kù)用戶名嘱兼、數(shù)據(jù)庫(kù)用戶密碼是否正確;
2.確認(rèn)是否是 數(shù)據(jù)庫(kù)服務(wù)存在問(wèn)題
如果信息正確贤徒,那么考慮是否是mysql的服務(wù)的問(wèn)題芹壕,比如,數(shù)據(jù)庫(kù)服務(wù)沒(méi)有運(yùn)行接奈、你自定義的數(shù)據(jù)庫(kù)端口和填寫(xiě)不一致等等踢涌。運(yùn)行下列命令:
netstat -utnlp | grep mysql
2.1如果命令運(yùn)行有結(jié)果,顯示的端口號(hào)和你在typecho安裝頁(yè)面填寫(xiě)的端口一致序宦,說(shuō)明mysql服務(wù)運(yùn)行和監(jiān)聽(tīng)是正常的睁壁。
2.2如果沒(méi)有結(jié)果,是mysql服務(wù)沒(méi)有啟動(dòng),或者防火墻禁掉了mysql的運(yùn)行端口潘明。
關(guān)掉防火墻行剂,然后用你安裝mysql的那個(gè)linux系統(tǒng)用戶啟動(dòng)一下mysql服務(wù)。
.../support-files/mysql.server start
...是你安裝mysql時(shí)配置的mysql根目錄(basedir)钳降,一般是/usr/local/mysql或者/etc/mysql厚宰。
2.3如果有結(jié)果,但顯示的端口號(hào)遂填,和你在typecho安裝頁(yè)面填寫(xiě)的端口不一致铲觉,說(shuō)明你端口號(hào)填錯(cuò)了,請(qǐng)以這個(gè)命令運(yùn)行結(jié)果中顯示的端口為準(zhǔn)吓坚。
3. 確認(rèn)是否是? 數(shù)據(jù)庫(kù)實(shí)例/數(shù)據(jù)庫(kù)用戶存在問(wèn)題
如果數(shù)據(jù)庫(kù)服務(wù)正常撵幽,再考慮是不是數(shù)據(jù)庫(kù)實(shí)例出了問(wèn)題,比如忘了創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例礁击、填寫(xiě)的數(shù)據(jù)庫(kù)用戶權(quán)限不足等等盐杂。
如果忘了創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例(就是你填寫(xiě)的數(shù)據(jù)庫(kù)名其實(shí)并不存在),那就創(chuàng)建一下哆窿,并且保障你填的那個(gè)數(shù)據(jù)庫(kù)用戶况褪,的確有你填的那個(gè)數(shù)據(jù)庫(kù)的完全權(quán)限。下面是創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例更耻、創(chuàng)建數(shù)據(jù)庫(kù)用戶测垛、賦予權(quán)限的命令。
假設(shè)秧均,你在typecho安裝頁(yè)填的數(shù)據(jù)庫(kù)名是AAA食侮,數(shù)據(jù)庫(kù)用戶名是BBB,密碼是CCC:
//linux系統(tǒng)命令目胡,進(jìn)入mysql:
mysql -u root -p
//sql命令锯七,創(chuàng)建一個(gè)新數(shù)據(jù)庫(kù)AAA;
create database if? not exists AAA default charset utf8 collate utf8_general_ci;
// sql命令誉己,創(chuàng)建一個(gè) 新用戶BBB眉尸,密碼是CCC:
create user 'BBB'@'%' identified by 'CCC';
//sql命令,數(shù)據(jù)庫(kù)AAA的權(quán)限全部向BBB開(kāi)放:
grant all on AAA.* to 'BBB@'%';
//sql命令巨双,刷新權(quán)限
flush privileges;
4.確認(rèn)是否是 php-fpm和數(shù)據(jù)庫(kù)的連接存在問(wèn)題
如果數(shù)據(jù)庫(kù)確確實(shí)實(shí)建好了噪猾、數(shù)據(jù)庫(kù)用戶也分配好了權(quán)限、mysql服務(wù)也正常啟動(dòng)筑累、端口也沒(méi)毛病袱蜡,還是連接不上數(shù)據(jù)庫(kù),可能是php.ini配置的問(wèn)題慢宗。php-fpm默認(rèn)使用socket連接數(shù)據(jù)庫(kù)坪蚁,而socket文件(mysql.sock)的位置是從php.ini文件中讀取的奔穿。但mysql.sock文件的實(shí)際位置,是mysql配置決定的敏晤,所以php.ini默認(rèn)的socket位置可能不對(duì)贱田,導(dǎo)致找不到socket、連接不上嘴脾。
這個(gè)有解決兩個(gè)辦法:
4.1.直接把typecho安裝頁(yè)面中湘换,數(shù)據(jù)庫(kù)地址 “l(fā)ocalhost” 改為 “127.0.0.1” 。
這就相當(dāng)于不用socket連接而用TCP/IP連接统阿。這一方法mysql可能也需要調(diào)整一下,讓mysql以tcp/ip的方式監(jiān)聽(tīng)你指定的那個(gè)端口(一般是3306)筹我。這一方案我沒(méi)有測(cè)試扶平。
4.2.修改php.ini文件,指向正確的mysql.sock位置蔬蕊。
首先看看你的mysql.sock文件在哪结澄,可以用find命令查,也可以查看mysql的配置文件my.cnf(一般在目錄/etc下面)中socket字段是怎么寫(xiě)的岸夯。假設(shè)麻献,你查到mysql.sock的位置是/ABC/mysql.sock,那么你應(yīng)該修改php.ini文件猜扮,使它指向正確的mysql.sock位置勉吻。vim php.ini,找到mysql.default_socket這一字段旅赢,取消它的注釋齿桃,并改為
mysql.default_socket =? /ABC/mysql.sock
如果你也不知道php.ini文件在哪,可以find / -name 'php.ini'煮盼。
當(dāng)然短纵,在typecho安裝界面,解釋器選擇mysql原生僵控,才需要修改php.ini的mysql.default_socket字段香到,如果解釋器選擇pdo,那需要修改的字段就變成php.ini文件中pdo對(duì)應(yīng)的socket字段了报破。
以上就是我想到的可能導(dǎo)致 “對(duì)不起,無(wú)法連接數(shù)據(jù)庫(kù),請(qǐng)先檢查數(shù)據(jù)庫(kù)配置再繼續(xù)進(jìn)行安裝?” 的所有可能的原因了悠就。?
順便提一下安裝時(shí)可能出現(xiàn)的另一種問(wèn)題:安裝typecho后立即進(jìn)入nginx未知報(bào)錯(cuò)頁(yè)面。這有可能是Nginx配置文件里充易,location后面的(或者fastcgi_split_path_info后面的)正則表達(dá)式?jīng)]寫(xiě)對(duì)理卑,導(dǎo)致path_info不能正確傳遞到fastcgi,百度一下正確的寫(xiě)法吧~(說(shuō)這段是因?yàn)槲易约壕痛中膶?xiě)錯(cuò)了哈哈哈)