晚上把博客遷了個伺服器,新建用戶的時候遇到問題了。 關於mysql的問題。 前置操作 建了兩個用戶,一個laravel,一個blog用戶以及他們的同名資料庫。 建好之後,命令行下麵連接mysql服務,都能正常登錄,並且也都能連上各自的資料庫。 問題體現 之前laravel用的root賬號,這次建好l ...
晚上把博客遷了個伺服器,新建用戶的時候遇到問題了。
關於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