解决centos的mysql服务3306端口无法远程连接10038问题

如题所述

第1个回答  2024-04-25

在上一篇文章中,我们探讨了如何在CentOS环境中安装宝塔控制面板并创建数据库。然而,当尝试在Windows上使用Navicat for MySQL远程连接时,却遇到了10038错误。此刻,我找到了一个有效的解决方案,让我们一起梳理这个问题的解决过程。


我们的服务器环境是基于CentOS 7.5.1804,一个强大而稳定的操作系统:


LSB Version:</ core-4.1-amd64:core-4.1-noarch

Distributor ID:</ CentOS

Description:</ CentOS Linux release 7.5.1804 (Core)

Codename:</ Core

以下是问题出现的步骤:



    在宝塔控制面板中新建数据库,并为新用户分配适当权限。
    尝试使用Navicat连接,但本地连接极其缓慢,最终出现10038错误。

问题的关键在于,虽然我们最初以为是MySQL用户组的远程连接设置问题,但实际上问题出在MySQL的默认端口3306被服务器防火墙阻止了。


首先,确保服务器上安装了端口扫描工具nmap,如果没有,可以使用以下命令安装:


sudo yum install nmap

接下来,通过nmap检查3306端口状态:


nmap http://182.161.41.XXX -p3306

如果结果显示为"filtered",说明可能被防火墙拦截。


确认防火墙状态,CentOS 7.5.1804使用firewalld服务:


sudo systemctl status firewalld

如果"active(running)",说明防火墙已启用。为了开放3306端口,我们可以执行以下命令以永久生效:


sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent

或者,直接编辑firewalld配置文件(public.xml):


sudo nano /etc/firewalld/zones/public.xml

添加完毕后,重载防火墙以应用更改:


sudo firewall-cmd --reload

再次使用nmap检查3306端口,确认其状态是否变为"open",表示连接已成功。


如果需要删除之前开放的特定端口,可以使用以下命令:


sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent

最后,如果需要调整MySQL用户权限,包括root用户,可以按照以下步骤操作:



    登录数据库:mysql -uroot -p
    为指定IP(如202.11.10.253)和用户名(如root)分配权限:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
    刷新权限:FLUSH PRIVILEGES;

现在,你应该已经成功解决了CentOS服务器上MySQL 3306端口的远程连接问题,可以愉快地在Windows上使用Navicat进行操作了。

相似回答