You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu虚拟机中MySQL无法响应外部客户端连接请求求助

MySQL远程连接失败排查(Ubuntu 20.04.5 LTS)

问题描述

在全新Ubuntu 20.04.5 LTS虚拟机上安装MySQL服务器后,出现以下问题:

  • 虚拟机内部可通过mysql命令用指定用户名密码正常访问,但外部远程连接完全失效
  • 已完成的配置:
    • ufw防火墙启用3306端口,iptables添加3306 TCP规则
    • 检查MySQL配置未找到显式的本地地址绑定项
    • 可通过同一IP地址SSH访问虚拟机,但无法连接MySQL
    • 目标用户已配置允许%地址访问,采用标准密码认证,授予全部权限
  • 远程连接报错:
    • JetBrains Rider(JDBC):Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    • MySQL Shell:ArgumentError: X protocol error: MySQL server has gone away Classic protocol error: MySQL Error 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

可能的原因及解决方法

1. MySQL隐式绑定回环地址

即使未找到显式的bind-address配置,MySQL 8.0在Ubuntu环境下默认仍会绑定127.0.0.1,拒绝外部连接:

  • 搜索所有MySQL配置文件中的绑定规则:
    sudo grep -r "bind-address" /etc/mysql/
    
  • 若输出bind-address = 127.0.0.1或bind-address = localhost,编辑对应配置文件(通常为/etc/mysql/mysql.conf.d/mysqld.cnf),修改为:
    bind-address = 0.0.0.0
    
  • 重启MySQL服务生效:
    sudo systemctl restart mysql
    

2. 验证MySQL监听状态

确认MySQL是否真的监听所有IP的3306端口:

sudo netstat -tulpn | grep mysql
  • 若输出为127.0.0.1:3306,说明绑定未修改成功,回到第一步检查配置
  • 若输出为0.0.0.0:3306或:::3306,则监听状态正常

3. 防火墙规则冲突或未生效

虽然配置了ufw和iptables,但规则顺序或重置问题可能导致端口被拦截:

  • 重置并重新配置ufw规则:
    sudo ufw reset
    sudo ufw allow ssh
    sudo ufw allow 3306/tcp
    sudo ufw enable
    
  • 验证规则优先级:
    sudo ufw status numbered
    
    确保3306/tcp允许规则排在所有拒绝规则之前

4. 用户权限配置未完全生效

即使设置了%访问权限,可能存在用户匹配优先级或权限未刷新的问题:

  • 登录MySQL内部,检查用户的主机绑定:
    SELECT user, host FROM mysql.user;
    
    确认目标用户的host字段为%,而非localhost或其他限制值;若存在同名不同host的用户,MySQL会优先匹配更严格的主机规则
  • 刷新权限:
    FLUSH PRIVILEGES;
    

5. 虚拟机网络模式限制

若虚拟机使用NAT模式,外部主机无法直接访问虚拟机私有IP,需配置端口转发:

  • 在虚拟机管理软件(VMware/VirtualBox)中设置端口转发,将宿主机的某个端口(如3307)映射到虚拟机的3306端口
  • 远程连接时使用宿主机IP和映射端口,例如:
    mysql -u your_user -p -h 宿主机IP -P 3307
    

6. MySQL 8.0认证插件兼容性问题

MySQL 8.0默认使用caching_sha2_password插件,部分旧JDBC驱动或客户端可能不兼容:

  • 检查用户的认证插件:
    SELECT user, plugin FROM mysql.user;
    
  • 若目标用户使用caching_sha2_password,切换为兼容的mysql_native_password:
    ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
    FLUSH PRIVILEGES;
    

内容的提问来源于stack exchange,提问作者Xeo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:35:25