MySQL8的密码重置及一些相关的知识点?

1,487 阅读4分钟

前言

常讲二手资料害死人,可要是真不看,连上哪里找问题答案都不清楚,可能要撞的墙非撞不可吧!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文件路径过深报错:

密码修改成功:

4.执行ctrl+c退出命令,net start mysql80,开启mysql进程服务;

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好像不需要添)

3.重新打开一个cmd,输入mysql就可以进入 因为安装mysql,初始化过一遍,跳过验证时默认root账户无密码.(初始化与mysqld --initialize-insecure --console,mysqld --initializ --console等命令有相关 )
4.在mysql客户端中,告诉服务器重新加载授权表,以便帐户管理语句起作用: mysql> FLUSH PRIVILEGES;

5.然后更改'root'@'localhost' 帐户密码。将密码替换为您要使用的密码 mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

6.net start mysql80,重新启动mysql80服务,root账户就可以使用新密码

密码重置的相关知识点:

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

程序安装路径目录:

程序安装路径bin文件夹目录:
数据路径目录:

2.常见的3360,3360端口,是安装时mysql服务默认使用的端口号;

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初始化也行.