
在 Linux 中配置 MySQL 允许远程访问是常见的运维操作,虽然网上教程较多,但实际操作中仍可能遇到各种问题。本文将系统梳理配置步骤,并标注关键注意事项,帮助你顺利完成设置。
第一步:创建远程访问用户
与 Windows 类似,首先需要在 MySQL 中创建一个用于远程登录的用户,并授予相应权限。建议避免直接使用 root 用户进行远程连接。
登录 MySQL 后,执行如下 SQL 语句(请替换 your_password为强密码):
CREATE USER 'admin'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
此操作创建了用户名为 admin、允许从任何主机(%)连接的用户。出于安全考虑,生产环境应限制访问 IP 并分配最小必要权限。
第二步:配置系统防火墙
如果系统启用了防火墙(如 iptables),必须开放 MySQL 的默认端口 3306。
临时停止防火墙服务:service iptables stop
编辑防火墙规则配置文件 /etc/sysconfig/iptables,在规则链中添加一行:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
关键点:该规则必须添加在以下两条拒绝规则之前:
-A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited
否则规则将不生效。
保存文件后重启防火墙:service iptables start
若使用 firewalld(如 CentOS 7/RHEL 7 以上),可使用命令:firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload
第三步:调整 MySQL 配置
如果前述步骤完成后仍无法连接,可能需要修改 MySQL 的主配置文件。
找到并编辑 /etc/my.cnf(如果不存在,可尝试 /etc/mysql/my.cnf或 MySQL 安装目录下的 my.cnf)。
在 [mysqld]配置节中,确保 bind-address设置为 0.0.0.0或注释掉该行(默认监听所有接口)。同时,为避免反向域名解析可能导致的连接延迟,可添加:
skip-name-resolve
保存后重启 MySQL 服务:service mysqld restart
找不到配置文件?
如果系统中没有 my.cnf,可使用 MySQL 自带的示例配置文件。通过 find / -name "my-*.cnf"查找,例如 my-small.cnf,将其复制到 /etc/并重命名为 my.cnf,再按需修改。
总结与检查
完成以上配置后,建议在远程机器上使用 mysql -h 服务器IP -u admin -p测试连接。同时务必确保网络安全,如设置强密码、限制访问 IP 范围,以降低风险。