navicat连接不上linux服务器mysql,90%因服务端未放开远程访问:需修改bind-address=0.0.0.0、授权用户host为%、开放防火墙及云安全组3306端口,并确保navicat填写的主机、端口、用户名、密码与服务端完全匹配。

Navicat 连接不上 Linux 服务器上的 MySQL,90% 是因为服务端没放开远程访问权限,而不是 Navicat 配置错了。
MySQL 服务端必须允许远程连接
Linux 上默认的 MySQL 配置只监听 127.0.0.1,意味着仅本机可连。Navicat 在另一台机器上,必须改配置:
- 编辑
/etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu)或/etc/my.cnf(CentOS),找到bind-address行 - 把
bind-address = 127.0.0.1改成bind-address = 0.0.0.0,或直接注释掉整行 - 重启 MySQL:
sudo systemctl restart mysql(Ubuntu)或sudo systemctl restart mysqld(CentOS)
改完不重启,配置不会生效;重启后用 sudo netstat -tuln | grep :3306 确认监听的是 *:3306,不是 127.0.0.1:3306。
用户账号得授权从任意 IP 登录
MySQL 的 user 表里,'root'@'localhost' 和 'root'@'%' 是两个完全不同的账号。本地能登 ≠ 远程能登:
- 登录 MySQL:
mysql -u root -p - 执行授权(以 root 为例):
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; - 刷新权限:
FLUSH PRIVILEGES; - 验证:
SELECT host, user FROM mysql.user WHERE user = 'root';,确保看到%行
注意:'root'@'%' 中的 % 不能带空格;密码必须是已设置过的强密码,不能留空;生产环境建议创建专用账号(如 'app_user'@'192.168.1.%'),而非开放 root。
Linux 防火墙和云服务器安全组都要放行 3306
即使 MySQL 允许远程连接,中间还有两道网络关卡拦着:
- 本地防火墙:Ubuntu 用
sudo ufw allow 3306;CentOS 7+ 用sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reload - 云服务器(阿里云/腾讯云等)必须在「安全组」里添加入方向规则:协议 TCP,端口 3306,源 IP 可填
0.0.0.0/0(测试用)或你的办公公网 IP(生产推荐) - 测试连通性:在 Navicat 所在机器执行
telnet your_server_ip 3306,能连上才说明网络层通了
很多报错 10060 或 Connection refused 都卡在这一步,别急着调 Navicat,先确认端口是否真能通。
Navicat 连接参数要严格匹配服务端信息
填错一个字段就会失败,尤其容易忽略的细节:
-
主机:填服务器公网 IP(不是localhost),可用curl ifconfig.me在服务器上查 -
端口:确认 MySQL 实际监听端口,sudo ss -tuln | grep mysql查,不一定是 3306 -
用户名:必须是 MySQL 里host字段为%(或具体 IP)的账号,不是 Linux 系统账号 -
密码:是 MySQL 账号密码,不是服务器 root 密码;如果用的是 MySQL 8.0+,密码加密方式可能不兼容旧版 Navicat,可临时执行ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd'; -
编码:建议在「高级」选项卡中设为utf8mb4,避免中文乱码
最后一步测试连接前,务必关掉所有无关终端窗口——有时候你改了配置但忘了重启 MySQL,或者开了多个 MySQL 实例监听不同端口,自己都搞混了。











