Navicat 连接虚拟机 MySQL 报 2003 错误(个人解决方法)
·
问题背景
主机 Windows 系统使用 Navicat 远程连接 VMware 虚拟机 Ubuntu 环境下的 MySQL 时,一直报错:2003 - Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (10061)反复修改授权、重启服务都无法解决,经过一步步深度排查,最终彻底搞定。
一、报错现象总结
- Navicat 连接虚拟机 MySQL 失败,2003 错误
- 虚拟机内本地登录 MySQL 正常
- 主机能 ping 通虚拟机 IP,但连不上 3306 端口
- 多次执行授权、创建用户语句报语法错误 / 用户已存在
二、根本原因定位
经过排查,核心原因只有三点:
- MySQL 默认只监听 127.0.0.1,不允许外部 IP 连接
- root 用户未开启远程权限(只允许 localhost 登录)
- 防火墙 / 端口拦截,或 MySQL 配置文件路径不熟悉导致修改失败
三、完整解决方案(一步到位,直接复制执行)
1. 查看 MySQL 端口监听状态(关键)
sudo netstat -anptu | grep 3306
- 如果显示:
127.0.0.1:3306→ 仅本地监听,外部无法连接 - 如果显示:
0.0.0.0:3306→ 正常,允许所有 IP 连接
2. 修改 MySQL 监听地址(最核心步骤)
Ubuntu 旧版本 MySQL 配置文件路径:/etc/mysql/my.cnf
执行一键修改命令:
sudo sed -i 's/bind-address.*=.*127.0.0.1/bind-address = 0.0.0.0/g' /etc/mysql/my.cnf
如果没有 bind-address 配置,直接追加:
echo "bind-address = 0.0.0.0" | sudo tee -a /etc/mysql/my.cnf
3. 重启 MySQL 服务
sudo service mysql restart
4. 授权 root 用户远程访问(旧版 MySQL 兼容语法)
mysql -uroot -p123456 -e "
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
"
5. 关闭防火墙(测试环境)
sudo ufw disable
6. 最终验证(必须执行)
sudo netstat -anptu | grep 3306
出现 0.0.0.0:3306 说明配置成功!
mysql -uroot -p123456 -e "SELECT user, host FROM mysql.user WHERE user='root';"
出现 root | % 说明远程权限开通成功!
四、Navicat 连接配置
- 连接方式:MySQL
- 主机 IP:虚拟机 IP(如:192.168.176.10)
- 端口:3306
- 用户名:root
- 密码:123456
点击测试连接 → 连接成功!
五、踩坑总结(避坑指南)
- 不要只改权限不改监听地址
- 旧版 MySQL 不支持新版
CREATE USER语法,直接用GRANT最稳 - Ubuntu 不同版本 MySQL 配置文件路径不同,优先改
/etc/mysql/my.cnf - 监听地址必须是
0.0.0.0,不能是 127.0.0.1 - 防火墙一定要关闭或放行 3306 端口
六、结束语
Navicat 连接虚拟机 MySQL 2003 错误,本质就是 MySQL 没对外开放 + 权限没开
下面是一键执行命令虚拟机中运行:
#!/bin/bash
# 适配Ubuntu 14.04,仅操作存在的my.cnf配置文件
# 1. 停止MySQL服务
sudo service mysql stop
# 2. 修改my.cnf中的bind-address(核心配置文件)
sudo sed -i 's/bind-address.*=.*127.0.0.1/bind-address = 0.0.0.0/g' /etc/mysql/my.cnf
# 3. 若my.cnf中无bind-address配置,直接添加
if ! grep -q "bind-address = 0.0.0.0" /etc/mysql/my.cnf; then
echo "bind-address = 0.0.0.0" | sudo tee -a /etc/mysql/my.cnf
fi
# 4. 启动MySQL服务
sudo service mysql start
# 5. 授权root用户远程访问(替换123456为你的MySQL密码)
sudo mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;"
# 6. 关闭防火墙,放行3306端口
sudo ufw disable
# 7. 验证3306端口监听状态(关键检查)
echo -e "\n===== 3306端口监听状态(需显示0.0.0.0:3306) ====="
sudo netstat -anptu | grep 3306
# 8. 验证root用户远程权限
echo -e "\n===== root用户权限(需显示root | %) ====="
sudo mysql -uroot -p123456 -e "SELECT user, host FROM mysql.user WHERE user = 'root';"
更多推荐


所有评论(0)