wsl中安装mysql 8.0需先彻底清理旧版本:sudo apt remove --purge mysql-server mysql-client mysql-common,rm -rf /etc/mysql /var/lib/mysql,再apt update && install;root默认auth_socket认证,须先sudo mysql执行alter user...identified with mysql_native_password设密码,再运行mysql_secure_installation;远程连接需改bind-address=0.0.0.0并创建'%'用户;字符集与大小写配置须在mysqld.cnf中显式设置。

直接用 apt install mysql-server 就行,但得先清旧账
WSL里装MySQL 8.0,最稳妥的方式是走Ubuntu官方源(比如22.04/24.04),sudo apt install mysql-server 能直接装上8.0.x。但前提是——你没残留旧版本。很多ERROR 2002、启动失败、mysqld.sock 找不到,根源都在没彻底清理。
务必执行以下清理步骤(顺序不能乱):
sudo apt remove --purge mysql-server mysql-client mysql-commonsudo rm -rf /etc/mysql /var/lib/mysqlsudo apt autoremove && sudo apt autoclean
做完再 sudo apt update && sudo apt install mysql-server。别跳过清理,否则后续改配置、设密码全会卡住。
root 登录不了?别碰 mysql_secure_installation 第一时间
装完直接 sudo mysql 进去,你会发现 root 默认是 auth_socket 插件认证,不认密码。这时候如果急着跑 mysql_secure_installation,它会强制让你设密码,但又不帮你切认证方式,结果就是:设完密码后,mysql -u root -p 死活连不上。
正确做法是先手动切换 root 认证方式:
- 运行
sudo mysql(此时能进) - 执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; - 再
FLUSH PRIVILEGES;
之后再运行 mysql_secure_installation 就不会冲突了。注意:这个操作必须在首次安全配置前完成,否则就得重装。
想从 Windows 宿主机连 WSL 的 MySQL?改 bind-address 和用户权限
WSL 默认只监听 127.0.0.1,Windows 本机用 127.0.0.1:3306 是连不上的——因为那是 WSL 的 localhost,不是 Windows 的。要连,两件事缺一不可:
- 编辑
/etc/mysql/mysql.conf.d/mysqld.cnf,把bind-address = 127.0.0.1改成bind-address = 0.0.0.0(或注释掉这行) - 在 MySQL 里创建一个允许远程连接的用户:
CREATE USER 'dev'@'%' IDENTIFIED BY '密码'; GRANT ALL ON *.* TO 'dev'@'%'; FLUSH PRIVILEGES;
改完重启服务:sudo service mysql restart。然后在 Windows 上用 mysql -h <code>wsl hostname -I | awk '{print $1}' -u dev -p 测试(或者直接用 Navicat 连那个 IP)。
中文乱码、大小写敏感这些细节,得在配置文件里硬写
MySQL 8.0 默认字符集是 utf8mb4,但 WSL 的 Ubuntu 终端、Windows 宿主机客户端(比如 cmd 或 VS Code 插件)未必自动识别。不显式配置,建表后插入中文就变 ???。
打开 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 下加这几行:
character-set-server = utf8mb4 collation-server = utf8mb4_0900_ai_ci init_connect = 'SET NAMES utf8mb4'
另外,lower_case_table_names=1(表名不区分大小写)必须在初始化数据目录前设置,装完再加会启动失败。如果你是从头安装,现在就加进去;如果已装好且不想重装,就别动它——开发环境少用大写表名更省事。
最后提醒一句:WSL 的 MySQL 不是“Windows 上的 MySQL”,它的进程、socket、网络栈全在 Linux 命名空间里。所有路径、权限、防火墙规则都按 Linux 看待,别套用 Windows 服务那一套逻辑。











