mysql在WSL环境中安装与使用注意事项
发布时间 - 2026-01-09 00:00:00 点击率:次WSL中MySQL安装后启动失败主因是systemd未启用或内存不足;需检查systemd状态、配置wsl.conf增加内存、用mysql_secure_installation初始化,或跳过权限验证重设密码,并正确配置网络与数据目录路径。
WSL 中 MySQL 安装失败常见原因
在 WSL(尤其是 WSL2)里直接 sudo apt install mysql-server 通常能成功,但后续启动失败、无法连接或服务自动退出,多半是因 systemd 不可用或资源限制导致。WSL1 默认无 systemd,WSL2 虽支持但需手动启用,而 MySQL 8.0+ 的 mysqld 默认依赖 systemd 管理 socket 和服务状态。
- 检查是否启用了 systemd:运行
ps -p 1 -o comm=,输出systemd才表示已启用;否则会 fallback 到sysvinit,但 MySQL 包可能未安装对应脚本 - 若未启用 systemd,建议改用
mysql-server-8.0的非 systemd 版本(如 Ubuntu 22.04+ 的mysql-server包实际已适配),或手动以守护进程方式启动:sudo mysqld --user=mysql --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock --port=3306 --pid-file=/var/run/mysqld/mysqld.pid &
- WSL2 内存默认限制较紧(尤其 Windows 内存不足时),
mysqld启动后可能被 OOM killer 杀掉;可在/etc/wsl.conf中添加:[wsl2] memory=2GB swap=1GB
,然后重启 WSL(wsl --shutdown+ 重新打开)
初始化 root 密码与跳过权限验证的实操区别
MySQL 5.7+ 默认禁用空密码 root 登录,且首次启动后不会生成临时密码(不像旧版会打印到 error log)。如果 sudo mysql 直接报 Access denied,说明没设密码或认证插件不匹配。
- 安全初始化推荐用
sudo mysql_secure_installation,它会引导设置 root 密码、禁用匿名用户、删除 test 数据库等——但前提是mysqld已正常运行且 socket 可达 - 若卡在登录环节,可临时跳过权限验证:先停止服务(
sudo service mysql stop或 killmysqld进程),再用sudo mysqld --skip-grant-tables --skip-networking &启动,此时mysql -u root可免密登录,接着执行:FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
- 注意:WSL 中
localhost和127.0.0.1行为一致,但若用 TCP 连接(如从 Windows 主机连 WSL 的 MySQL),需确认bind-address在/etc/mysql/mysql.conf.d/mysqld.cnf中设为0.0.0.0或注释掉,并开放port = 3306
从 Windows 主机连接 WSL 中 MySQL 的网络配置要点
WSL2 使用虚拟网卡,其 IP 每次启动可能变化,且 Windows 防火墙默认拦截 3306 端口。直接填 localhost:3306 从 Windows 连不上,必须用 WSL2 的实际 IP。
- 在 WSL 中运行
ip addr show eth0 | grep "inet " | awk '{print $2}' | cut -d/ -f1获取当前 IPv4 地址(如172.28.12.19) - 在 Windows PowerShell(管理员)中执行:
netsh interface portproxy add v4tov4 listenport=3306 listenaddress=127.0.0.1 connectport=3306 connectaddress=172.28.12.19
,这样 Windows 上就能用127.0.0.1:3306访问 - 确保 MySQL 用户允许远程连接:登录后执行
CREATE USER 'dev'@'%' IDENTIFIED BY 'pass'; GRANT ALL ON *.* TO 'dev'@'%'; FLUSH PRIVILEGES;
;注意'%'不包含localhost,所以本地仍要用'root'@'localhost' - Windows 防火墙要放行入站规则:控制面板 → Windows Defender 防火墙 → 高级设置 → 入站规则 → 新建规则 → 端口 → TCP 3306 → 允许连接
数据目录迁移与权限问题(尤其挂载 Windows 文件系统时)
把 MySQL datadir 改到 /mnt/c/... 下看似方便备份,但会导致启动失败或数据损坏——NTFS 文件系统不支持 Unix 套接字、硬链接、文件锁等 MySQL 依赖的底层特性。
- 绝对不要将
datadir设为/mnt/c/...或任何跨文件系统路径;只允许保留在 WSL 的 ext4 分区(如/var/lib/mysql或/home/user/mysql-data) - 若需定期导出到 Windows,用
mysqldump或mysqlpump生成 SQL 文件,再复制到/mnt/c/...;导入同理,先复制进 WSL,再用mysql命令执行 - 修改
datadir后必须同步更新 AppArmor 配置(Ubuntu):编辑/et,添加新路径的读写权限,然后执行
c/apparmor.d/usr.sbin.mysqldsudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld - 权限错误典型现象:启动时报
Can't start server : Bind on unix socket: Permission denied,检查/var/run/mysqld/目录属主是否为mysql:mysql,并确认 SELinux/AppArmor 未拦截
WSL 环境下 MySQL 最容易被忽略的是 systemd 依赖和 Windows/WSL 网络边界——不是“装上了就能用”,而是得明确知道哪一步在哪个环境里生效、socket 走的是 Unix 域还是 TCP、以及权限模型如何跨层传递。
# mysql
# linux
# word
# windows
# 防火墙
# app
# access
# 端口
# ubuntu
# unix
# proxy
# sql
# print
# Error
# var
# 数据库
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Java垃圾回收器的方法和原理总结
php打包exe后无法访问网络共享_共享权限设置方法【教程】
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
JS中对数组元素进行增删改移的方法总结
免费视频制作网站,更新又快又好的免费电影网站?
香港服务器部署网站为何提示未备案?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
如何快速搭建高效香港服务器网站?
zabbix利用python脚本发送报警邮件的方法
怎样使用JSON进行数据交换_它有什么限制
JavaScript如何实现倒计时_时间函数如何精确控制
Firefox Developer Edition开发者版本入口
Thinkphp 中 distinct 的用法解析
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
韩国服务器如何优化跨境访问实现高效连接?
Python高阶函数应用_函数作为参数说明【指导】
三星、SK海力士获美批准:可向中国出口芯片制造设备
如何用虚拟主机快速搭建网站?详细步骤解析
如何快速启动建站代理加盟业务?
如何在IIS7中新建站点?详细步骤解析
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
JavaScript如何操作视频_媒体API怎么控制播放
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel如何使用.env文件管理环境变量?(最佳实践)
如何快速搭建高效WAP手机网站?
如何用低价快速搭建高质量网站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何在万网开始建站?分步指南解析
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Linux网络带宽限制_tc配置实践解析【教程】
如何快速生成ASP一键建站模板并优化安全性?
Laravel如何处理表单验证?(Requests代码示例)
Python文件操作最佳实践_稳定性说明【指导】
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Python文本处理实践_日志清洗解析【指导】
Laravel如何实现数据库事务?(DB Facade示例)
公司门户网站制作流程,华为官网怎么做?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
如何在建站之星网店版论坛获取技术支持?
如何在七牛云存储上搭建网站并设置自定义域名?
如何在阿里云虚拟主机上快速搭建个人网站?
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
米侠浏览器网页背景异常怎么办 米侠显示修复
如何快速搭建虚拟主机网站?新手必看指南
如何实现javascript表单验证_正则表达式有哪些实用技巧
下一篇:WSDL的, , 标签是什么
下一篇:WSDL的, , 标签是什么


c/apparmor.d/usr.sbin.mysqld