如何修复Navicat连接MariaDB报错2003问题_通过检查防火墙3306端口开放状态

雨敏酱_1665

雨敏酱_1665

2026-07-17

661人浏览

原创

2003错误大概率是防火墙拦截3306端口,需检查系统防火墙(firewalld/ufw/windows防火墙)及云服务器安全组是否放行,并用telnet或nc验证端口可达性,同时确认mariadb监听0.0.0.0:3306且未启用skip-networking。

检查防火墙是否放行3306端口

navicat 连接 mariadb 报错 2003 - can't connect to mysql server on 'xxx' (10061),如果服务已运行、配置正确、用户权限无误,那大概率是防火墙拦住了 3306 端口的入站连接。这个环节常被跳过,但恰恰是远程连接失败最顽固的卡点。

Linux 上默认启用 firewalld 或 ufw,Windows 则走系统自带防火墙规则。不检查端口通断,光改配置等于白调。

  • 在 MariaDB 服务器上执行:sudo ss -tlnp | grep :3306 —— 确认 MariaDB 确实在监听 0.0.0.0:3306(而非仅 127.0.0.1:3306)
  • 检查防火墙状态:sudo firewall-cmd --state(firewalld)或 sudo ufw status verbose(Ubuntu)
  • 若未开放 3306,立即添加规则:sudo firewall-cmd --add-port=3306/tcp --permanent + sudo firewall-cmd --reload
  • Windows 用户请进「高级安全 Windows 防火墙」→「入站规则」→ 新建规则 → 端口 → TCP 3306 → 允许连接 → 作用域设为“任何 IP”(测试阶段)
  • 别忘了云服务器(如阿里云、腾讯云)还有安全组——必须单独在控制台放行 3306,它比系统防火墙更外层,漏掉就彻底不通

验证 3306 是否真能从外部访问

改完防火墙不验证,等于没改。本地 telnet xxx.xxx.xxx.xxx 3306 或用 nc -zv xxx.xxx.xxx.xxx 3306 是最直接的检测方式。失败 ≠ 防火墙问题,也可能是 MariaDB 没监听公网地址,或中间网络设备(如路由器、NAT)做了拦截。

  • 从 Navicat 所在机器执行:telnet your-mariadb-server-ip 3306;如果显示 “Connected”,说明端口通了;如果超时或拒绝连接,继续往下排查
  • 若 telnet 失败但 ss -tlnp 显示监听 0.0.0.0:3306,立刻检查云厂商安全组和物理网络路径
  • 若 telnet 成功但 Navicat 仍报 2003,问题已移出网络层,转向 MariaDB 用户权限或 SSL 配置
  • 注意:某些 ISP 或企业内网会屏蔽 3306,可临时换端口测试(如改 MariaDB 的 port=3307 并同步放行)来交叉验证

firewalld/ufw 规则常见陷阱

加了端口却没生效?不是命令写错,就是规则没持久化或作用域不对。尤其 firewalld 默认只对 public zone 生效,而很多服务器初始化后实际在 default zone 或其他 zone。

navicatmysql
navicatmysql

Navicat For MySQL

下载
  • firewall-cmd --list-all 查当前 zone 的所有规则,确认 3306 在 ports: 列表里,且 zone 名是你正在用的那个(常用 public 或 trusted)
  • ufw allow 3306 后必须 sudo ufw reload,否则不生效;ufw status 输出中要看到 3306/tcp 在 ALLOW 行
  • CentOS 7+ 默认用 firewalld,但有人手动装了 iptables-services 并启用,会导致 firewalld 规则被覆盖——查 systemctl status iptables,开着就关掉:sudo systemctl stop iptables && sudo systemctl disable iptables
  • 不要用 iptables -A INPUT ... 直接加规则,firewalld 和 iptables 混用极易冲突,统一用 firewalld 命令管理

为什么 telnet 通了,Navicat 还连不上?

这是最让人抓狂的阶段:端口开着,服务跑着,用户授权了,结果 Navicat 依旧报 2003。此时重点看 MariaDB 的 bind-address 和客户端解析行为。

  • 即使防火墙开了 3306,若 MariaDB 配置了 bind-address = 127.0.0.1,它只接受本机回环连接,外部请求会被静默丢弃 —— 必须改成 0.0.0.0 或具体服务器 IP
  • 修改 /etc/my.cnf 或 /etc/mysql/mariadb.conf.d/50-server.cnf 中的 [mysqld] 段,加一行:bind-address = 0.0.0.0,然后 sudo systemctl restart mariadb
  • Navicat 连接时填的主机名如果是 localhost,Windows/macOS 会优先走 socket 连接(绕过 TCP),而 socket 文件路径可能不对;改用 127.0.0.1 强制走 TCP,能更快暴露真实问题
  • 某些 MariaDB 版本(如 10.6+)默认启用 skip-networking = off,但若误配为 on,会直接禁用所有 TCP 连接 —— 检查配置文件里有没有这行,有就删掉或设为 off

防火墙端口放开只是必要条件,不是充分条件。真正卡住人的,往往是 bind-address 和 skip-networking 这两个配置项被忽略,或者云安全组与系统防火墙双层遗漏。动手前,先用 telnet 定位到底卡在哪一层。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2023.06.29

2685

3

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2023.08.14

3901

10

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2023.08.31

2951

3

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.05

947

5

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

2607

5

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

2023.10.16

2607

4

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

2023.10.16

2873

3

vb连接数据库的方法
vb连接数据库的方法

vb连接数据库的方法有使用ADO对象库、使用OLEDB数据提供程序、使用ODBC数据源等。详细介绍:1、使用ADO对象库方法,ADO是一种用于访问数据库的COM组件,可以通过ADO连接数据库并执行SQL语句。可以使用ADODB.Connection对象来建立与数据库的连接,然后使用ADODB.Recordset对象来执行查询和操作数据;2、使用OLEDB数据提供程序方法等等。

2023.10.19

2421

3

mdf文件导入数据库的方法
mdf文件导入数据库的方法

mdf文件导入数据库的方法有使用SQL Server Management Studio、使用SQL Server命令行工具、使用SQL Server Integration Services等方法。想了解更多mdf文件导入数据库的方法的相关内容,可以阅读本专题下面的文章。

2023.10.23

2593

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Linux网络安全之防火墙技术汇总
Linux网络安全之防火墙技术汇总

共31课时 | 4.2万人学习