- 官网下载Installer正常安装,默认服务名为:MySQL80,默认程序安装路径为:C:\Program Files\MySQL\MySQL Server 8.0,默认数据文件Data和配置文件my.ini的路径为:C:\ProgramData\MySQL\MySQL Server 8.0
- 默认安装后,正常使用时没有问题的(至少现在没遇到过),但是如果遇到忘记root密码,需要使用mysqld命令的时候(官方Reset Root密码说明),就会出问题,会提示找不到Data文件夹,或者手动创建的Data文件夹,提示无效。如下
[Server] Failed to set datadir to 'C:\Program Files\MySQL\MySQL Server 8.0\data\' (OS errno: 2 - No such file or directory) [MySQL] Failed to find valid data directory
- 猜测是MySQL的Bug——我在重装了不下10遍MySQL Server之后的结论,mysqld实际是在安装路径下找Data文件夹,而且Data文件夹中的内容是自动生成的,不为空。有了这个思路,就可以来解决问题
- 停止默认安装的服务MySQL80:net stop mysql80
- 移除MySQL80:.\mysqld.exe -remove mysql80
- 重新初始化:.\mysqld.exe --initialize-insecure,此时在C:\Program Files\MySQL\MySQL Server 8.0\路径下有生成data文件夹,里面包含若干文件
- 复制C:\ProgramData\MySQL\MySQL Server 8.0 下的ini文件,到C:\Program Files\MySQL\MySQL Server 8.0,修改datadir路径为:datadir="C:/Program Files/MySQL/MySQL Server 8.0\Data" 注意要用引号括起来
- 重新安装MySQL服务,指定服务名为MySQL(可以自定义,前后保持一致即可),指定配置文件:.\mysqld.exe --install MySQL --defaults-file="C:\Program Files\MySQL\MySQL Server 8.0\my.ini" 。注意:4 和 5不能忽略,否则后续密码校验或者数据读取、存储,使用的还是ProgramData路径下的Data文件夹
- 启动服务:net start mysql .
- 此时,设置了正确配置文件和Data路径的MySQL就安装好了。因为使用了全新的Data文件夹,所以root登录不需要密码。直接:.\mysql.exe -u root -p 敲回车登录。
- 修改允许登录位置:update mysql.user set host='%' where user='root';
- 设置密码:alter user 'root'@'%' identified by '1234' 。现在再登录,就需要输入密码
- 接下来模拟遗忘密码的处理流程:
- 停止MySQL服务:net stop mysql
- 以管理员身份打开Terminal窗口,输入: .\mysqld.exe --console --shared-memory --skip-grant-tables 确认无Error
- 新开Terminal窗口,直接输入: .\mysql.exe 即可登录
- 登录后刷新:flush privileges
- 此时在本机命令行窗口以可以使用新密码登录,其他机器使用Navicat连接仍提示拒绝,在 以管理员身份打开的Terminal窗口中:Ctrl+C停止进程,正常启动服务即可:net start mysql
- 然后重新设置密码即可:alter user 'root'@'%' identified by '3456'。