能,但必须手动初始化、显式注册服务、严格控制路径和编码——跳过任一环节,mysqld启动必失败;my.ini须用ansi编码(禁utf-8-bom),路径禁中文空格括号,初始化须在bin目录执行mysqld --initialize-insecure,注册服务须指定--defaults-file绝对路径,首次登录后须立即执行alter user切换认证插件为mysql_native_password。

能,但必须手动初始化、显式注册服务、严格控制路径和编码——跳过任一环节,mysqld 启动必失败。
my.ini 文件必须用 ANSI 编码且路径无空格
Windows 记事本默认保存为 UTF-8-BOM,MySQL 8.0 的 mysqld 读取时会把 BOM 解析成非法字符,报错:unknown variable '锘縖mysqld]'。这不是配置写错了,是文件开头多了三个不可见字节。
- 用记事本新建 → 「另存为」→ 文件名填
my.ini(务必勾选「所有文件」,否则变成my.ini.txt)→ 编码选「ANSI」 - 更稳妥:用 VS Code 或 Notepad++,保存时明确选 Encoding →
ANSI(不是UTF-8,也不是UTF-8 with BOM) -
basedir和datadir路径中不能含中文、空格、括号;可用正斜杠替代反斜杠,如D:/mysql8合法,D:\Program Files\MySQL非法
初始化 data 目录必须在 bin 下执行 --initialize-insecure
直接在任意目录运行 mysqld --initialize 会提示 The data directory must be specified 或找不到 mysqld.exe——因为该命令依赖当前工作目录下的动态库和配置上下文。
- 以管理员身份打开 CMD,先
cd /d D:/mysql8/bin(替换成你的真实路径) - 执行
mysqld --initialize-insecure --console:加--console才能看到输出;--insecure表示 root 密码为空,适合本地开发快速验证 -
datadir对应的目录必须已存在且为空,mysqld不会自动创建父级路径(例如D:/mysql8/data要提前手动建好) - 执行后检查
datadir下是否生成了mysql、sys等系统库目录;若仍为空,大概率是路径配置错误或权限不足
注册 Windows 服务必须显式指定 --defaults-file
直接运行 mysqld --install 会让服务启动时去默认位置找配置(如 C:\my.ini),根本不会读你放在 MySQL 根目录下的 my.ini,结果就是服务启动失败,事件查看器里报错:Could not open required defaults file。
- 正确命令:
mysqld --install MySQL80 --defaults-file=D:/mysql8/my.ini - 服务名(如
MySQL80)可自定义,但后续启停都得用这个名字:net start MySQL80、net stop MySQL80 -
--defaults-file后的路径必须是绝对路径,相对路径(如.\my.ini)在服务上下文中无效 - 改完
my.ini后必须重启服务才能生效:net stop MySQL80 && net start MySQL80
首次登录后必须立即改密并确认认证插件
MySQL 8.0 默认使用 caching_sha2_password 插件,而 Navicat、DBeaver、旧版 JDBC 驱动等不支持,连上就报 Access denied。
- 用空密码登录:
mysql -u root -p→ 回车直接进 - 立即执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; - 再执行:
FLUSH PRIVILEGES; - 验证是否生效:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';,确保plugin列为mysql_native_password
最常被忽略的是 my.ini 编码和 --defaults-file 参数——前者导致服务压根起不来,后者让服务起来却读不到配置,两者都会让你卡在“明明装好了却连不上”的死循环里。











