《mysql問(wèn)題排查過(guò)程》要點(diǎn):
本文介紹了mysql問(wèn)題排查過(guò)程,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
導(dǎo)讀:建了兩個(gè)用戶,一個(gè)laravel,一個(gè)blog用戶以及他們的同名數(shù)據(jù)庫(kù).建好之后,命令行下面連接mysql服務(wù),都能正常登錄,并且也都能連上各自的數(shù)據(jù)庫(kù).
前置操作
建了兩個(gè)用戶,一個(gè)laravel,一個(gè)blog用戶以及他們的同名數(shù)據(jù)庫(kù).
建好之后,命令行下面連接mysql服務(wù),都能正常登錄,并且也都能連上各自的數(shù)據(jù)庫(kù).
問(wèn)題體現(xiàn)
之前l(fā)aravel用的root賬號(hào),這次建好laravel用戶之后,改了laravel的配置文件,laravel的服務(wù)一切正常
但是blog用戶能在終端登錄,代碼不能連接數(shù)據(jù)庫(kù).
1.開(kāi)始以為是用戶權(quán)限沒(méi)設(shè)置好
1.1 重新設(shè)置權(quán)限給blog用戶,還是不行.
1.2 根據(jù)mysql官方文檔刪除用戶之后,重建blog用戶. 竟然還是不行!
1.3 剛好在遷移博客的時(shí)候從GitHub拉了typecho的新代碼,這個(gè)時(shí)候以為是typecho升級(jí)造成的問(wèn)題,那么就別升級(jí)了,直接用新代碼新安裝.竟然還是不行!!
** 期間經(jīng)歷了重啟php-fpm,重啟mysql等各種亂七八糟的操作之后還是沒(méi)解決.**
那就只能看看調(diào)試信息了.
2.調(diào)試
typecho只提示連接數(shù)據(jù)庫(kù)失敗,上服務(wù)器改了下install.php文件,把具體的異常打印出來(lái).
異常中說(shuō)SQLSTATE[HY000] [2002] No such file or directory,好,那就搜一下.
3.搜索
好多人都說(shuō)連接數(shù)據(jù)庫(kù)的時(shí)候把localhost改成127.0.0.1就可以解決.但如果就這么解決了多沒(méi)意思
有人提到是socket文件不對(duì).看了下php.ini,配置文件中的選項(xiàng)是空的,注釋掉的.
解決解決A
這里其實(shí)應(yīng)該有解決辦法了,就是去改php.ini,設(shè)置默認(rèn)的socket.
但還是不想這么簡(jiǎn)單的解決問(wèn)題,就繼續(xù)往下查了.
解決B
(這里還走了一個(gè)彎路,以為是socket文件不對(duì),刪掉sock文件,重啟mysql,發(fā)現(xiàn)還是不行.)
執(zhí)行ps aux | grep mysql,看到
mysql 11964 02:48 0:01 /usr/sbin/mysqld --basedir=... --socket=/var/lib/mysql/mysql.sock
連接mysql,執(zhí)行mysql> show variables like '%sock%',結(jié)果:
+-----------------------------------------+---------------------------+
| Variable_name?????????????????????????? | Value???????????????????? |
+-----------------------------------------+---------------------------+
| performance_schema_max_socket_classes?? | 10??????????????????????? |
| performance_schema_max_socket_instances | -1??????????????????????? |
| socket????????????????????????????????? | /var/lib/mysql/mysql.sock |
+-----------------------------------------+---------------------------+
看了下php的配置php -i | grep socket
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
這里可以看到mysql的socket設(shè)置和php是的socket是不對(duì)應(yīng)的.
這里用了一個(gè)比較二的方法.直接在/tmp建立了一個(gè)軟連接到實(shí)際的sock,能運(yùn)行了.
后期的猜測(cè)與疑問(wèn)
1.為什么laravel能正常跑而typecho不行呢?
猜測(cè):typecho用的是pdo,會(huì)需要這個(gè)socket,laravel沒(méi)用這個(gè).
在調(diào)試期間也用phpstorm自帶的數(shù)據(jù)庫(kù)連接器連接也失敗,如果是這種猜測(cè)的話為什么phpstorm也失敗,莫非phpstorm用的連接內(nèi)核也是PDO?
2.為什么他們把localhost改成127.0.0.1就行?
這個(gè)問(wèn)題就太專業(yè)了,不知道了.
中途還慘雜著切換typecho各種試,typecho新老版本還切換了不同的數(shù)據(jù)驅(qū)動(dòng)文件.
排查問(wèn)題的時(shí)候還是別搞幺蛾子了,一點(diǎn)點(diǎn)慢慢排查.
我有時(shí)候有點(diǎn)受虐傾向,就是喜歡走彎路去排查問(wèn)題.
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/5545.html