Navicat成功连接Linux MySQL需同时满足三条件:网络可达、MySQL监听外部IP(bind-address=0.0.0.0)、用户具备远程权限(如naviuser@%并指定mysql_native_password插件);缺一即失败。
Navicat 能连上 Linux 上的 MySQL,前提是三个条件同时满足:Linux 服务器网络可达、MySQL 服务监听外部 IP、用户账号有远程访问权限。缺一不可,多数连接失败都卡在这三处中的某一个。
别急着填 Navicat 表单,先在 Windows 上验证基础连通性:
ping 测试能否到达服务器 IP(比如 ping 192.168.133.159),不通说明网络层有问题telnet 测试 3306 端口是否开放(telnet 192.168.133.159 3306),拒绝连接大概率是防火墙或 MySQL 未监听外部systemctl status firewalld,Ubuntu 用 sudo ufw status;若开启,加规则 sudo firewall-cmd --add-port=3306/tcp --permanent 再重载,或临时关掉测试默认 MySQL 只监听 127.0.0.1,必须改配置文件让它接受外部连接:
/etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu)或 /etc/percona-server.conf.d/mysqld.cnf(Percona)bind-address,注释掉 bind-address = 127.0.0.1 这行,改为 bind-address = 0.0.0.0
sudo systemctl restart mysqld(CentOS)或 sudo systemctl restart mysql(Ubuntu)0.0.0.0,应限制为具体 IP 段,比如 bind-address = 192.168.133.0/24
root 用户默认只允许本地登录,直接改 root 的 host 风险高,推荐新建专用用户:
mysql -u root -p,输入密码后执行:CREATE USER 'naviuser'@'%' IDENTIFIED BY 'StrongPass123!';GRANT ALL PRIVILEGES ON *.* TO 'naviuser'@'%';FLUSH PRIVILEGES;ALTER USER 'naviuser'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass123!';
'root'@'%' —— 安全审计通常禁止 root 远程登录填错主机、端口或用户类型,测试连接会直接报错 Connection refused 或 Access denied:
localhost 或 127.0.0.1)3306,除非你启动容器时用了 -p 5506:3306 这类映射naviuser,不是 root
127.0.0.1,端口填容器映射到宿主机的端口最常被忽略的是 MySQL 8.0 的密码认证插件不兼容旧客户端,错误提示通常是 Authentication plugin 'caching_sha2_password' cannot be loaded —— 必须用 ALTER USER ... IDENTIFIED WITH mysql_native_password 显式切换,Navicat 才能握手成功。