直接用 sudo apt install mysql-server 安装 MySQL 8.0 后无法直连,因 WSL2 默认配置与 auth_socket 认证机制不兼容;需手动初始化数据目录、修改 bind-address 为 0.0.0.0、创建远程用户并放行 Windows 防火墙 3306 端口。

直接用 sudo apt install mysql-server 就能装上 MySQL 8.0,但默认装完根本连不上——不是你配错了,是 WSL2 的默认配置和认证机制天然不支持开发直连。
为什么 mysql -u root -p 一直报 ERROR 2002?
这不是服务没启动,而是数据目录没初始化或 mysqld 启动失败后静默退出。WSL2 不依赖 systemd,service mysql start 显示成功不代表进程真在跑。
- 先确认进程状态:
sudo service mysql status,如果显示active (exited)或压根没起来,说明初始化卡住了 - 手动初始化数据目录:
sudo rm -rf /var/lib/mysql && sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql - 再启动:
sudo service mysql start,然后sudo ss -tlnp | grep :3306看是否监听成功 - 若仍失败,检查
/var/log/mysql/error.log,常见原因是磁盘空间不足或/var/lib/mysql权限不对(应属mysql:mysql)
root 登录不了?别急着跑 mysql_secure_installation
WSL2 中的 MySQL 8.0 默认用 auth_socket 插件认证 root,它只认系统用户身份,不走密码。此时运行 mysql_secure_installation 会强制设密码,但不会帮你切认证方式,结果就是设完反而更连不上。
- 必须先用
sudo mysql进去(不输密码),执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码'; - 再执行
FLUSH PRIVILEGES; - 之后才能安全运行
mysql_secure_installation,否则脚本中途可能报错退出,留下半残配置 - 注意:MySQL 8.0 默认插件是
caching_sha2_password,Windows 客户端(如 Navicat、DataGrip)常握手失败,mysql_native_password是目前最稳的选择
从 Windows 主机连不上?关键在三处配置
WSL2 的网络是虚拟网卡,127.0.0.1 在 Windows 和 WSL2 里指向不同地址,所以不能用 localhost 直连。
- 改绑定地址:编辑
/etc/mysql/mysql.conf.d/mysqld.cnf,把bind-address = 127.0.0.1改成bind-address = 0.0.0.0(不是注释掉,显式赋值才生效) - 开远程用户:进 MySQL 执行
CREATE USER 'dev'@'%' IDENTIFIED WITH mysql_native_password BY '密码'; GRANT ALL ON *.* TO 'dev'@'%'; FLUSH PRIVILEGES;(别直接开root@'%') - 查 WSL2 当前 IP:
cat /etc/resolv.conf | grep nameserver | awk '{print $2}',通常类似172.x.x.1;Windows 端就用这个 IP + 3306 连 - 别漏 Windows 防火墙:必须放行 TCP 3306 入站规则,否则包根本到不了 WSL2
最容易被忽略的是 WSL2 IP 动态变化——每次关机重启后 IP 可能变,硬编码在 IDE 或连接工具里会失效。建议写个 alias 或小脚本自动获取并提示,而不是记死 IP。


















