wsl中安装mysql后需三步解决远程连接问题:启动服务并设为开机自启;修改root认证方式并创建'%'通配远程用户;将bind-address改为0.0.0.0、放行windows防火墙3306端口,并用wsl动态ip而非localhost连接。

WSL 中装 MySQL 很快,但默认配置不支持远程连接,且 mysql 命令可能找不到——问题出在服务未启动、用户权限未开放、防火墙未放行这三处。
安装 MySQL 并确保服务自动运行
WSL2(推荐 Ubuntu 22.04+)直接用 apt 安装的是 MySQL 8.0,默认启用 systemd 支持有限,需改用 service 管理:
- 运行
sudo apt update && sudo apt install mysql-server,安装过程不提示设 root 密码,而是用auth_socket插件认证 - 首次启动后立即执行
sudo service mysql start,并加到开机自启:sudo systemctl enable mysql(若报错则跳过,改用sudo update-rc.d mysql defaults) - 验证是否运行:
sudo service mysql status,看到active (running)才算成功
修改 root 用户认证方式并创建远程用户
MySQL 8.0 默认 root 只允许本地 socket 登录,localhost 和 127.0.0.1 在权限表里是两个不同 host,必须显式授权:
- 先用
sudo mysql -u root进入(不用密码),执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password'; - 再创建可远程访问的用户(不建议直接放开 root 远程):
CREATE USER 'devuser'@'%' IDENTIFIED BY 'a_secure_password';GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'%' WITH GRANT OPTION; - 刷新权限:
FLUSH PRIVILEGES;
修改 MySQL 绑定地址并重启服务
默认 bind-address = 127.0.0.1 会拒绝所有外部连接,包括 Windows 主机通过 localhost 访问 WSL 的请求:
- 编辑配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf - 找到
bind-address行,改为:bind-address = 0.0.0.0(或注释掉整行) - 保存后重启服务:
sudo service mysql restart - 确认监听状态:
sudo ss -tlnp | grep :3306,应看到*:3306而非127.0.0.1:3306
从 Windows 主机连接时连不上?检查这三点
即使 MySQL 配置正确,Windows 端仍常因网络层阻断失败:
- WSL2 使用虚拟网卡,其 IP 每次启动可能变化;连接时不要用
localhost,而要用 WSL 的实际 IP:grep nameserver /etc/resolv.conf | awk '{print $2}'(通常为172.x.x.1) - Windows 防火墙默认拦截入站 3306,需手动放行:打开「高级安全 Windows 防火墙」→「入站规则」→ 新建规则 → 端口 → TCP 3306 → 允许连接
- MySQL 用户权限中
'devuser'@'%'是对的,但若用 Navicat 或 DBeaver 测试,务必勾选「使用 SSL」为「否」,否则握手失败报错Authentication plugin 'caching_sha2_password' cannot be loaded
真正卡住的地方往往不是安装,而是 WSL2 动态 IP + Windows 防火墙 + MySQL 认证插件三者叠加导致的连接静默失败。每次重启 WSL 后,先查 IP、再试 telnet、最后才看 MySQL 日志(sudo tail -f /var/log/mysql/error.log),比反复重装高效得多。










