Ubuntu 16.04 + MySQL 8.0-由The driver has not received any packets from the server引發的一系列錯誤,以及最後的解決方案

按照慣例,遇到Linux相關的問題先說系統版本,我用的是Ubuntu 16.04。

事情的起因是這樣的,把打了個jar包扔上服務器,然後nohup java -jar運行,本來一切正常(之前一直都很正常),但這次報了個沒見過的錯:

The driver has not received any packets from the server。

網上查了一下說是連接超時,然後我就想着打開MySQL去改一下設置,結果發現MySQL連不上了,運行mysql -u root -p報錯:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)。

然後我就按照網上的說法,刪掉了/tmp/mysql.sock和/tmp/mysql.sock.lock,然後systemctl restart mysql重啓MySQL,結果這次連MySQL服務都沒法啓動了,報錯:

The server quit without updating PID file.

看起來是刪文件刪出問題了。網上資料基本上是基於5.x的,而MySQL到了8.0之後發生了很大變化,沒有找到一個能用的方案。

有人說刪掉data目錄下ib開頭的文件可以解決,我試了一下,除了會導致啓動報錯之外並沒有什麼效果。後來查了一下資料才知道,ib開頭的文件和InnoDB引擎有關係。

中間還出現了幾次not found的錯誤,後來發現只是因爲沒有權限而已,chmod一下就好了;但是仍然無法啓動,還是那個PID file的報錯。

後來看到有人說刪掉data重新初始化可以解決,我就試了一下,從某種程度上來說確實算是解決了,因爲按照這個流程操作之後,MySQL是可以運行了,但是MySQL的服務仍然是掛掉的,會報錯:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)。

只能說治標不治本,而且root用戶的密碼還是空的:

rm -rf data
bin/mysqld --initialize-insecure
bin/mysqld -u root &

實在沒辦法,先是想着能不能把MySQL的系統服務刪掉或者改一下,改成啓動改過的命令,後來發現不是很好弄,就想着乾脆卸載重裝算了。

在準備卸載的過程中,看到官網上的安裝流程,想着覆蓋一下mysql.server是不是能弄好:cp support-files/mysql.server /etc/init.d/mysql.server,後來發現也沒啥用……

rm -rf mysql之前,我想着再最後掙扎一下,因爲整個流程中還有一個地方沒有檢查過,就是mysql用戶的權限。打開/etc/passwd之後,把mysql用戶的權限改成0,也就是給它root權限,保存之後重新啓動服務,它好了……

問題算是解決了,但爲什麼呢?如果有人知道,請不吝賜教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章