错误消息 **"Error: Can't connect to MySQL server on 'localhost' (10061)"** 表示客户端无法连接到 MySQL 服务器,通常原因如下:
1. **MySQL 服务未启动**
- MySQL 服务器可能没有启动。在 Windows 中,可以打开“服务”管理器,找到 `MySQL` 服务并手动启动。在 Linux 中,可以使用以下命令检查 MySQL 是否正在运行:
```bash
sudo systemctl status mysql # Ubuntu/Debian
sudo systemctl status mysqld # CentOS/Fedora
```
2. **端口号不正确**
- 默认情况下,MySQL 服务器使用端口 **3306**。如果配置文件中的端口号更改过,客户端可能连接不上。
- 可以检查 MySQL 的配置文件(如 `my.cnf` 或 `my.ini`)中的端口号设置,确保客户端连接到正确的端口。
3. **防火墙阻止连接**
- 本地防火墙可能阻止了 MySQL 的端口。如果防火墙启用了规则来阻止 3306 端口,可以暂时禁用防火墙或开放该端口。可以通过以下命令在 Linux 上开放 3306 端口:
```bash
sudo ufw allow 3306 # Ubuntu 防火墙示例
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent # CentOS/Fedora
sudo firewall-cmd --reload # 重新加载防火墙
```
4. **绑定地址配置问题**
- 在 MySQL 配置文件中,`bind-address` 设置可能只允许远程连接或仅绑定到某个特定 IP 地址。确保配置文件中的 `bind-address` 设置为 `127.0.0.1` 或 `localhost`,以允许本地连接。
5. **Socket 文件丢失或路径不正确**
- 在某些系统中,MySQL 使用 Unix Socket 文件进行连接。确保配置文件中的 `socket` 路径正确,并且该文件确实存在。默认情况下,该文件通常位于 `/var/run/mysqld/mysqld.sock` 或类似路径。
6. **用户权限问题**
- 如果连接的用户没有适当的权限,也可能无法连接。确保用户 `localhost` 上的权限正确,可以尝试使用以下命令重新授予权限:
```sql
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
```
解决思路总结
依次检查 MySQL 服务状态、端口设置、防火墙规则、绑定地址、Socket 文件以及用户权限,确保 MySQL 配置和服务器设置正确。