一次花費了一兩個小時的mysql問題排查


晚上把博客遷了個服務器,新建用戶的時候遇到問題了。
關於mysql的問題。

前置操作

建了兩個用戶,一個laravel,一個blog用戶以及他們的同名數據庫。
建好之后,命令行下面連接mysql服務,都能正常登錄,並且也都能連上各自的數據庫。

問題體現

之前laravel用的root賬號,這次建好laravel用戶之后,改了laravel的配置文件,laravel的服務一切正常
但是blog用戶能在終端登錄,代碼不能連接數據庫。

1.開始以為是用戶權限沒設置好

1.1 重新設置權限給blog用戶,還是不行。

1.2 根據mysql官方文檔刪除用戶之后,重建blog用戶。 竟然還是不行!

1.3 剛好在遷移博客的時候從GitHub拉了typecho的新代碼,這個時候以為是typecho升級造成的問題,那么就別升級了,直接用新代碼新安裝。竟然還是不行!!

** 期間經歷了重啟php-fpm,重啟mysql等各種亂七八糟的操作之后還是沒解決。**
那就只能看看調試信息了。

2.調試

typecho只提示連接數據庫失敗,上服務器改了下install.php文件,把具體的異常打印出來。
異常中說SQLSTATE[HY000] [2002] No such file or directory,好,那就搜一下。

3.搜索

好多人都說連接數據庫的時候把localhost改成127.0.0.1就可以解決。但如果就這么解決了多沒意思
有人提到是socket文件不對。看了下php.ini,配置文件中的選項是空的,注釋掉的。

解決

解決A

這里其實應該有解決辦法了,就是去改php.ini,設置默認的socket。
但還是不想這么簡單的解決問題,就繼續往下查了。

解決B

(這里還走了一個彎路,以為是socket文件不對,刪掉sock文件,重啟mysql,發現還是不行。)

執行ps aux | grep mysql,看到

mysql 11964 02:48 0:01 /usr/sbin/mysqld --basedir=... --socket=/var/lib/mysql/mysql.sock

連接mysql,執行mysql> show variables like '%sock%',結果:

+-----------------------------------------+---------------------------+
| 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設置和php是的socket是不對應的。
這里用了一個比較二的方法。直接在/tmp建立了一個軟連接到實際的sock,能運行了。

后期的猜測與疑問

1.為什么laravel能正常跑而typecho不行呢?
猜測:typecho用的是pdo,會需要這個socket,laravel沒用這個。
在調試期間也用phpstorm自帶的數據庫連接器連接也失敗,如果是這種猜測的話為什么phpstorm也失敗,莫非phpstorm用的連接內核也是PDO?

2.為什么他們把localhost改成127.0.0.1就行?
這個問題就太專業了,不知道了。

巴拉巴拉

中途還慘雜着切換typecho各種試,typecho新老版本還切換了不同的數據驅動文件。
排查問題的時候還是別搞幺蛾子了,一點點慢慢排查。
我有時候有點受虐傾向,就是喜歡走彎路去排查問題。

從頭至尾總共能花了兩個多小時吧。。
現在時間2017-07-30 03:45

博客:http://blog.icp0.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM