导读:本期聚焦于创作的《如何在Linux系统中安全地配置MySQL并开启远程访问功能?》,敬请观看详情。在Linux环境下部署MySQL数据库后,默认仅允许本地连接,而许多业务场景需要通过远程客户端管理或使用数据库。本文将系统梳理从创建远程用户、开放防火墙端口到调整MySQL网络监听的完整配置流程,并标注每一步的潜在陷阱与安全建议。你将了解到如何避免直接使用root远程登录,正确添加iptables或firewalld规则,以及通过bind-address和skip-name-resolve参数解决连接失败问题。文末还提供了连接验证命令和最小权限原则的最佳实践,帮助运维人员高效、安全地完成远程访问设置。

在Linux服务器上安装好MySQL后,如果我们希望使用Navicat、DBeaver等图形化工具或者从其他应用服务器直接连接数据库,就必须开启远程访问能力。默认情况下,MySQL仅监听本地回环地址(127.0.0.1),并且系统防火墙也会阻挡外部请求。下面将按照“创建用户-开放端口-修改服务配置”的顺序,详细介绍每一步的操作方法与注意事项。

如何在Linux系统中安全地配置MySQL并开启远程访问功能?

第一步:创建用于远程登录的数据库用户

出于安全考虑,强烈反对直接开放root账号的远程权限。合理的做法是建立一个独立的远程管理用户,并赋予其适当的操作权限。

首先通过SSH终端登录到服务器,使用mysql -u root -p进入MySQL命令行,然后执行以下SQL语句(请将your_password替换为复杂度足够高的密码):

CREATE USER 'admin'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

上面代码中,'admin'@'%'表示用户名为admin,百分号代表允许从任意IP地址连接。如果你需要更加精细的管控,可以把改成具体的IP或子网,比如'admin'@'192.168.1.100''admin'@'192.168.1.%'。另外,GRANT ALL PRIVILEGES ON *.*赋予了该用户对所有数据库的全部权限,生产环境建议遵循最小权限原则,根据实际需求仅授予特定库的SELECT、INSERT、UPDATE等操作权限。

第二步:配置系统防火墙放行MySQL端口

MySQL默认使用3306 TCP端口。如果服务器的防火墙处于激活状态,外部客户端将无法与该端口建立连接。CentOS 6及更早版本通常使用iptables,而CentOS 7、RHEL 7及以上版本则转向firewalld。

对于iptables防火墙

首先可以通过service iptables status确认服务是否运行。然后编辑规则配置文件/etc/sysconfig/iptables,在合适的位置添加一条允许3306端口的规则。非常关键的一点是:新添加的规则必须放在拒绝所有流量的REJECT规则之前,否则永远不会被匹配到。通常文件末尾会看到类似下面的内容:

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

我们需要在这些行上方插入以下规则:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

保存修改后,使用service iptables restart重启防火墙使配置生效。

对于firewalld防火墙

如果使用firewalld,操作会更加直接,执行如下两条命令即可永久开放3306端口并重新加载:

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

完成后可通过firewall-cmd --list-ports检查端口是否已成功添加。

第三步:修改MySQL服务监听地址与相关选项

即使防火墙已经放行端口,MySQL自身可能仍然拒绝来自非本地的连接。这通常是因为配置文件中的bind-address参数被设置成了127.0.0.1或者skip-networking选项被启用。

使用vim或nano打开MySQL的主配置文件,常见位置包括/etc/my.cnf/etc/mysql/my.cnf/usr/local/mysql/my.cnf。如果系统中没有该文件,可以尝试查找示例配置文件:

find / -name "my-*.cnf" 2>/dev/null

找到示例后(例如my-medium.cnf),可将其复制到/etc/目录下并重命名为my.cnf,再根据自身需求调整。

[mysqld]配置节中,我们需要检查并修改以下几个参数:

[mysqld]
# 将bind-address设置为0.0.0.0以监听所有网络接口,或者直接注释掉该行
bind-address = 0.0.0.0

# 跳过DNS反向解析,避免客户端连接时的延迟
skip-name-resolve

# 如果存在下面这行且未注释,请注释掉或删除
# skip-networking

其中,bind-address = 0.0.0.0表示MySQL服务会绑定到本机的所有IP地址上,从而接受来自任意网络的连接。如果注释掉该行,效果相同,因为MySQL的默认行为就是监听所有接口。skip-name-resolve参数可以避免MySQL对客户端的IP进行反向DNS解析,在企业内网环境中能够显著提高连接速度,但需要注意:设置后所有用户权限表中的主机名都必须使用IP地址或通配符,不能使用域名。

完成配置文件的编辑后,重启MySQL服务使改动生效:

# 对于使用systemd的系统
systemctl restart mysqld
# 对于传统SysV init系统
service mysqld restart

验证与安全加固

所有步骤都完成后,你可以在另一台机器上使用MySQL客户端工具测试连接:

mysql -h 服务器IP地址 -P 3306 -u admin -p

输入密码后如果能成功进入MySQL提示符,说明远程访问已经配置成功。如果仍然失败,可以依次排查以下常见问题:防火墙规则顺序错误、云服务提供商安全组未放行3306端口、MySQL用户权限表未及时刷新、以及SELinux策略干扰(可尝试临时关闭SELinux测试:setenforce 0)。

在享受远程连接便利性的同时,务必重视安全措施:为远程用户设置高强度密码并在生产环境中限制来源IP;定期审计权限,移除不用的账号;如果条件允许,可以考虑通过VPN或SSH隧道加密数据库连接,避免明文数据在公网传输。

MySQL远程访问Linux防火墙配置bind-addressskip-name-resolve用户权限管理修改时间:2026-08-01 00:21:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。