前言
常讲二手资料害死人,可要是真不看,连上哪里找问题答案都不清楚,可能要撞的墙非撞不可吧!MySQL对我们而言是个黑盒,我觉得不涉及到优化的问题,暂时不必过多探究它的运行机制,更何况还有那么多可视化工具.网上常见的重置root密码博客,不区分MySQL的版本,可实际上MySQL5和MySQL8还是有一些不同的,但是装了MySQL8还没多长时间,文件安装位置和数据存储位置刚刚搞清楚,很难明白版本的区别会对实际操作造成哪些影响.
环境:windows7系统版本:MySQL8.0.16
安装方式:使用MySQL Installer安装
问题描述
1.root账户的密码被你忘了怎么办?手贱了一下,动了系统用户表又怎么办?
2.见识一下由密码重置操作连带的一系列知识点?
密码重置的解决方案:
官方文档:密码重置的解决方案(写得很好,除了不能完全照搬以外,没毛病)
第一方案:重启服务,读取文件
1.打开cmd命令行,切换至mysql安装位置,输入net stop mysql80,关闭mysql服务;

2.创建一个txt文件,比如命名为mysql-init.txt,写入ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';(但是该文件不宜放入过深的文件路径,如果过深,命令行在读取该文件时,可能会报参数过多的错误,放在C盘或D盘根目录就可以)
3.输入:mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --init-file=D:\mysql-init.txt --console
mysql-init文件路径过深报错:


5.正常登陆, mysql -u root -p,密码即为新密码,验证成功,为了安全,删除mysql-init.txt文件
第二方案:跳过验证,重置密码
1.net stop mysql80;关闭mysql进程服务;
2.依旧使用cmd在mysql程序安装位置的bin文件夹下,执行命令,输入 mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --console --skip-grant-tables --shared-memory(没有--shared-memory无法跳过验证,mysql5好像不需要添)




密码重置的相关知识点:
1.多数博客给出的方案无法直接使用的原因:使用使用MySQL Installer安装后,mysql8.0安装时数据和程序路径是分开设置的 程序安装路径一般在:C:\Program Files\MySQL\MySQL Server 8.0 数据路径一般在:C:\ProgramData\MySQL\MySQL Server 8.0,数据路径这里是有my.ini配置文件用于配置mysql,一些命令需要读取该文件.mysql5没试过,可能是在一起的
程序安装路径目录:



3.数据路径下的data文件夹和.ini配置文件.data中的.err文件会记录一些错误,是否算是错误日志尚未验证.my.ini配置文件未做过多研究,具体内容就不说了,密码重置需要读取该文件.初始化会重置Data文件夹和ini配置文件.(初始化命令的执行位置应该就是数据路径,不想作大死,所以也没试)初始化与mysqld --initialize-insecure --console,mysqld --initializ --console等命令有相关,一个会为root账号生成随机密码,一个会将密码置为空,日志文档会记录密码信息;
4.mysqld --initialize-insecure --console,mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --init-file=D:\mysql-init.txt --console等命令中的console,我觉得最好加上这一参数,可以查看打印结果,能知道命令的执行成功与否;
5.net stop mysql80:当我们在mysql客户端输入exit,只是断开了客户端和服务端的连接,后台服务进程(即mysqld)依旧在运行,net stop mysql80是关闭后台进程.为什么是mysql80,mysql8安装时服务进程默认名为mysql80,应该可以改,或者mysqld --initializ --console初始化也行.