必须以管理员身份运行终端,否则mysqld --install一定失败;普通cmd窗口因uac拦截仅报“access is denied”或静默无响应;注册前须确认bin目录下mysqld.exe存在、my.ini配置正确且basedir/datadir为不带尾斜杠的绝对路径;推荐命令:mysqld --install mysql80 --defaults-file="c:\mysql\my.ini"。

必须以管理员身份运行终端,否则 mysqld --install 一定失败——这不是命令写错,是 Windows UAC 拦截了服务注册操作。
为什么普通 CMD 窗口执行 mysqld --install 会静默失败
普通权限窗口下执行该命令,结果只有两种:报 Access is denied,或完全没反应、也不报错。Windows 服务注册属于系统级操作,必须由 SYSTEM 或 Administrators 组成员发起。右键「开始」→选「终端(管理员)」是最稳妥的方式,别用搜索框点开的普通终端。
注册前必须确认的三件事
缺一不可,否则注册成功但后续启动必报错:
-
cd /d C:\mysql\bin切到 MySQL 的bin目录(/d支持跨盘符,比单纯cd可靠) -
dir mysqld.exe确认文件存在;若提示“找不到”,说明路径不对或 ZIP 包未解压完整 - 手动创建好
my.ini,且其中basedir和datadir都是**绝对路径**,末尾不能带反斜杠(C:\mysql\❌,C:\mysql✅)
注册命令怎么写才真正生效
直接运行 mysqld --install 是最常见错误:它默认用服务名 MySQL,且不指定配置文件,导致启动时找不到 my.ini,日志里反复报 Could not open required defaults file。
正确写法(推荐显式命名 + 显式指定配置):
mysqld --install MySQL80 --defaults-file="C:\mysql\my.ini"
注意点:
- 服务名不能含空格或特殊字符:
MySQL 8.0❌,MySQL80✅ -
--defaults-file后必须是**绝对路径**,相对路径(如.\my.ini)在服务上下文中无效 - 路径含空格(如
C:\Program Files\MySQL\)时,整个mysqld命令需用英文双引号包裹:"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld" --install MySQL80 --defaults-file="C:\Program Files\MySQL\MySQL Server 8.0\my.ini"
注册成功 ≠ 服务能自动启动
注册只是把服务写进 Windows 服务管理器,真正开机自启还差关键两步:
- 用
sc config MySQL80 start= auto(注意start=后有空格)设启动类型为自动;或者打开services.msc→ 找到MySQL80→ 属性 → 启动类型选「自动」→ 应用 - 手动启动一次:
net start MySQL80;只改启动类型不手动启动,下次开机也不会拉起 - 别选「自动(延迟启动)」:它等基础服务就绪后才启动 MySQL,在开发或单机测试中容易误判为“没起来”
最容易被忽略的是:即使所有步骤都做了,如果 datadir 不为空、或 NETWORK SERVICE 用户没有该目录的“完全控制”权限,服务仍会在启动瞬间退出,事件查看器里能看到 Can't open the mysql.plugin table 这类错误——这说明初始化还没做,不是服务配置问题。











