錯誤原因分析
-
MySQL 服務未運行(最常見原因)
- 錯誤中的
(2)
表示 “No such file or directory”,即/tmp/mysql.sock
不存在 - 這通常意味著 MySQL 服務器根本沒有啟動
- 錯誤中的
-
socket 文件路徑不匹配
- 客戶端嘗試連接
/tmp/mysql.sock
- 但 MySQL 服務器可能配置了不同的 socket 路徑(如
/var/run/mysqld/mysqld.sock
)
- 客戶端嘗試連接
-
權限問題
- 當前用戶對 socket 文件或所在目錄沒有訪問權限
解決方案
1. 首先檢查 MySQL 服務狀態
# 使用 systemd 的系統
sudo systemctl status mysql# 或使用 service 命令
sudo service mysql status
如果服務未運行,啟動它:
sudo systemctl start mysql
# 或
sudo service mysql start
2. 確認 socket 文件的實際位置
sudo find / -name "*.sock" 2>/dev/null | grep mysql
常見位置包括:
/var/run/mysqld/mysqld.sock
(Ubuntu/Debian 默認)/tmp/mysql.sock
/var/lib/mysql/mysql.sock
3. 連接時指定正確的 socket 路徑
mysql -u root -p --socket=/實際路徑/mysql.sock
4. 或者使用 TCP/IP 連接(如果服務器允許)
mysql -u root -p -h 127.0.0.1
5. 檢查配置文件
查看 /etc/my.cnf
或 /etc/mysql/my.cnf
中的 [mysqld]
部分:
MySQL 客戶端默認按以下順序查找配置文件:
/etc/my.cnf
/etc/mysql/my.cnf
~/.my.cnf
(當前用戶的個人配置)~/.mylogin.cnf
(加密的登錄路徑文件,由mysql_config_editor
生成)
[mysqld]
socket=/path/to/mysql.sock
6. 創建符號鏈接(臨時解決方案)
sudo ln -s /實際路徑/mysql.sock /tmp/mysql.sock
常見問題排查
-
如果 MySQL 無法啟動:
sudo tail -n 50 /var/log/mysql/error.log
-
權限問題修復:
sudo chown -R mysql:mysql /var/lib/mysql sudo chmod -R 755 /var/lib/mysql
-
完全重新安裝(最后手段):
sudo apt purge mysql-server sudo rm -rf /var/lib/mysql sudo apt install mysql-server
預防措施
-
將正確的 socket 路徑添加到客戶端配置:
echo "[client] socket=/實際路徑/mysql.sock" >> ~/.my.cnf
-
確保 MySQL 服務設置為開機啟動:
sudo systemctl enable mysql