mysqld 初始化卡在“generating rsa keys”是因windows熵不足导致rtlgenrandom阻塞;验证方法是停服务后运行mysqld --console --skip-grant-tables,秒级就绪即确认;绕过方案为添加skip-grant-tables和loose-default-authentication-plugin=mysql_native_password、删密钥文件、用--initialize-insecure初始化,启动后须立即改密并移除skip-grant-tables。

mysqld 初始化卡在 “generating RSA keys” 阶段,本质是 Windows 下 RtlGenRandom 系统调用因熵不足而阻塞,不是配置写错了,也不是磁盘慢了——它根本没在干活,只是在等随机数。
mysqld --initialize 卡住时怎么快速验证确实是 RSA 生成问题
- 先停掉 MySQL 服务(
net stop mysql) - 以管理员身份运行:
mysqld --console --skip-grant-tables - 如果秒级输出
ready for connections,说明问题定位准确 - 若仍卡住,则需排查
datadir权限、ibdata1可写性或磁盘空间
怎么跳过 RSA 密钥自动生成(不改认证逻辑,只绕初始化)
这不是“禁用加密”,而是让服务先跑起来,后续再补安全。关键动作必须按顺序做:
- 编辑
my.ini(路径如C:\ProgramData\MySQL\MySQL Server 8.0\my.ini),在[mysqld]下加两行:skip-grant-tables loose-default-authentication-plugin=mysql_native_password
- 删除或重命名
data\public_key.pem和data\private_key.pem(如果存在) - 以管理员身份运行:
mysqld --initialize-insecure --user=mysql
(注意:不是--initialize,--initialize-insecure不生成 root 密码,也不触发 RSA 初始化) - 启动服务:
net start mysql
这个流程能将启动时间从几十秒压到 3 秒内。
启动成功后必须立刻执行的安全补救
跳过 ≠ 安全,尤其 Windows 上默认权限松散,不补救等于裸奔:
- 连接数据库:
mysql -u root --skip-password - 执行强制改密和认证插件切换:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码';
- 退出后,立刻从
my.ini中删掉skip-grant-tables - 确保
default_authentication_plugin=mysql_native_password保留(除非你明确需要caching_sha2_password)
如果后续真要启用 caching_sha2_password(比如对接老 Java 客户端),不要直接重启就开,先确认系统熵源稳定——比如 Hyper-V 虚拟机需开启 “Integration Services → Security Services”,否则照样卡。
RSA 密钥生成本身不可跳过,但首次初始化时的自动生成可以绕;真正容易被忽略的是:绕过之后若忘记清理 skip-grant-tables 或没重设密码,Windows 下服务可能在下次自动重启时又卡死,且无日志提示。











