許多開發者都曾遭遇過「Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'」這個經典錯誤。網路上的解法五花八門,但往往治標不治本。本文將分享一次真實的排查過程,帶你從現象穿透到本質,掌握核心排查思路。
某日嘗試連線 MySQL 時,終端拋出錯誤:
zhouqian@zhou:~$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
這時 mysql.sock 文件確實不存在於 /var/run/mysqld/ 目錄下。網路上常見的解法包括:修改 my.cnf 中的 socket 路徑、建立軟連結、甚至重裝 MySQL。但逐一嘗試後問題依舊,差點走上重裝的不歸路。
冷靜下來查看 MySQL 錯誤日誌 mysql_error.log,發現關鍵線索:
111205 21:19:55 InnoDB: Started; log sequence number 0 87713
111205 21:19:55 [ERROR] /usr/sbin/mysqld: unknown variable 'replication_wild_do_table=db_test.tb1'
111205 21:19:55 [ERROR] Aborting
111205 21:19:55 InnoDB: Starting shutdown...
111205 21:20:00 InnoDB: Shutdown completed; log sequence number 0 87713
111205 21:20:00 [Note] /usr/sbin/mysqld: Shutdown complete
原來是配置文件中寫入了錯誤參數 replication_wild_do_table=db_test.tb1,導致 MySQL 服務根本啟動失敗,自然也就無法生成 socket 文件。
修正配置文件後重啟服務,mysql.sock 即刻出現:
root@zhou:/var/run/mysqld# ls
mysqld.sock
核心啟示:
mysql_error.log。建議養成「先看日誌、再動手」的習慣,掌握 MySQL 基礎架構後再深入源碼機制,排查效率將質變。