MySQL 开启远程访问配置指南
如果你的 MySQL 数据库在服务器本地可以访问,但无法从外部客户端(如 Navicat、DBeaver 或其他服务器)连接,通常需要完成以下 四个关键步骤 的配置。
修改 MySQL 配置文件(解除绑定限制)
MySQL 默认可能只监听本地回环地址 0.0.1,导致外部请求被拒绝。
- 配置文件路径:通常位于
/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/my.cnf。 - :找到
bind-address这一行。- 将
bind-address = 127.0.0.1修改为bind-address = 0.0.0.0(表示监听所有网卡地址)。 - 或者直接在行首添加 将其 注释掉。
- 将
- 生效操作:修改后必须重启 MySQL 服务。
- 命令:
sudo systemctl restart mysql或sudo service mysql restart。
- 命令:
配置 MySQL 用户权限(授权远程登录)
MySQL 的用户权限是绑定 用户名 + 主机名 的,默认的 root 用户通常只允许 localhost 登录。
- 登录 MySQL:
mysql -u root -p - 执行授权命令(根据版本选择):
- MySQL 8.0+ 版本:
-- 1. 创建用户(如果已存在则跳过) CREATE USER 'root'@'%' IDENTIFIED BY '你的密码'; -- 2. 授予所有权限 GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION; -- 3. 刷新权限 FLUSH PRIVILEGES;
- MySQL 5.7 及以下版本:
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION; FLUSH PRIVILEGES;
- MySQL 8.0+ 版本:
- 重点说明: 代表允许从 任何 IP 地址 连接,为了安全,建议将 替换为 具体的客户端 IP 地址
。
配置操作系统防火墙(放行端口)
即使 MySQL 允许连接,如果服务器操作系统的防火墙拦截了 3306 端口,依然无法访问。
- Ubuntu (UFW):
- 命令:
sudo ufw allow 3306/tcp
- 命令:
- CentOS (Firewalld):
- 命令:
sudo firewall-cmd --permanent --add-port=3306/tcp - 生效:
sudo firewall-cmd --reload
- 命令:
- 检查端口是否开启:使用
netstat -tunlp | grep 3306查看端口是否处于LISTEN状态且绑定在0.0.0。
配置云服务器安全组(云平台拦截)
如果你使用的是 简米云、酷番云、AWS 等云服务器,除了系统内部防火墙,还需要在云控制台的 安全组/网络 ACL 中放行端口。
- 操作步骤:
- 登录云服务器控制台 $rightarrow$ 实例详情 $rightarrow$ 安全组/防火墙
。
- 添加 入方向规则。
- 协议选择:TCP。
- 端口范围:3306。
- 授权对象:0.0.0/0(或你的特定公网 IP)。
- 登录云服务器控制台 $rightarrow$ 实例详情 $rightarrow$ 安全组/防火墙
快速排查清单
如果配置完成后仍然无法连接,请按此顺序检查:
- Ping 测试:能否 ping 通服务器公网 IP?(检查网络连通性)
- Telnet 测试:执行
telnet 服务器IP 3306,如果提示连接失败,说明 防火墙或安全组 仍有拦截。 - 权限测试:检查 MySQL 用户表
SELECT user, host FROM mysql.user;确认 root 用户的 host 是否为 。 - 版本兼容:MySQL 8.0 默认使用
caching_sha2_password插件,部分旧版客户端不支持,可尝试修改加密方式:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/491287.html


