错误原因分析
-
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