MySQL账户密码重置
0.引言
相信不少小伙伴都有遗忘密码这一高频率的事情,恰逢笔者即是如此。许久不碰MySQL,早已将MySQL密码忘得干净,连如何修改密码都已不清楚了。为了以后方便自己再次出现这种事情,特别留下这次找回密码的过程予以记录,以方便往后二次使用。
需要进行密码重置的情况:
(1)忘记root账户密码,需要重置root密码;
(2)修改root账户密码;
(3)重置一般账户密码,包括忘记和修改一般账户密码;
1 Windows上密码重置
1.1 MySQL服务开启与关闭
这个是验证所安装的MySQL软件服务器mysqld是否正常开启了,否则MySQL根本无法使用。
前提:已经正确安装了MySQL,且正确配置了环境变量,是指mysql能够在Windows运行的环境。
方式一:命令行开启与关闭
步骤1:win+R,cmd
步骤2:net start mysql80 | net stop mysql80
方式二:图形窗口开启与关闭
找到服务,从服务中找到MySQL80手动开启或关闭即可。
步骤:控制面板=>管理工具=>服务=>MySQL80
1.2 MySQL密码重置
1.2.1 忘记root账户密码
(一)直接修改密码【操作上容易】
方法一:此法笔者亲测有效
参考资料:https://www.cnblogs.com/wt645631686/p/16913211.html
步骤1:找到文件my.ini,通常该文件在安装路径下,以下三种路径均有可能:
路径1:D:\ProgramData\MySQL\MySQL Server 8.0 【笔者放在此路径下】
路径2:D:\Program Files\MySQL\MySQL Server 8.0
路径3:D:\Program Files\MySQL\MySQL Server 8.0\bin
步骤2:修改文件my.ini,找到“[mysqld]”编辑增加“skip-grant-tables” 【免密登录mysql】
示例如下:
[mysqld]
skip-grant-tables
步骤3:清除原有密码。
Step1:mysql -u root -p
Step2:use mysql;
Step3:update user set authentication_string = '' where user = 'root';【此步关键,清空密码】
authentication_string:所有账户密码存放之处,经过加密后的字符串。
Step4:flush privileges;【刷新】
Step5:exit;
步骤4:再次修改文件my.ini,找到“[mysqld]”删除或注释“skip-grant-tables”所在行【恢复密码登录mysql】
示例如下:
[mysqld]
# skip-grant-tables
步骤5:无密码登录,然后修改密码。
Step1:mysql -u root -p
Step2:use mysql;
Step3:ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';【此步关键,设置新密码】
Step4:flush privileges;【刷新】
Step5:exit;
Step6:mysql -u root -p 【二次登录验证】
方法二:(笔者没有测试成功,重启服务后再次登录依然无效)
步骤1【关闭mysql服务】:net stop mysql80
步骤2【命令行切换至mysql安装路径】:
Step1【改变磁盘】:D: 【cmd键入命令,笔者安装在D盘】
Step2【切换至安装路径】:cd "Program Files\MySQL\MySQL Server 8.0\bin\"
步骤3【跳过权限审查】:mysqld --skip-grant-tables --shared-memory --console
or:mysqld -nt --skip-grant-tables【该法在MySQL8.0已经失效】
示例:出现下面情况,属于正常
D:\Program Files\MySQL\MySQL Server 8.0\bin>mysqld --console --skip-grant-tables --shared-memory
2022-12-01T18:36:36.138273Z 0 [System] [MY-010116] [Server] D:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysqld 8.0.25) starting as process 15020
2022-12-01T18:36:36.157570Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-12-01T18:36:36.414958Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-12-01T18:36:36.556622Z 0 [Warning] [MY-011311] [Server] Plugin mysqlx reported: 'All I/O interfaces are disabled, X Protocol won't be accessible'
2022-12-01T18:36:36.631465Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2022-12-01T18:36:36.631774Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2022-12-01T18:36:36.650256Z 0 [System] [MY-010931] [Server] D:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe: ready for connections. Version: '8.0.25' socket: '' port: 0 MySQL Community Server - GPL.
注:前三步可以合并,命令为:
"D:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --console --skip-grant-tables --shared-memory
步骤4【无密码登录mysql】:另外打开一个cmd,键入命令:mysql 或者mysql -u root
步骤5【清空密码】:
Step1:use mysql;
Step2【清空加密信息,不要修改为其他信息】:
update mysql.user set authentication_string='' where user='root' and host='localhost';
Step3【重新加载权限】: flush privileges;
Step4:exit;
示例:
mysql> use mysql;
Database changed
mysql> update mysql.user set authentication_string='' where user='root' and host='localhost';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)
mysql> alter user 'root'@'localhost' IDENTIFIED BY 'NewPassword';
Query OK, 0 rows affected (0.01 sec)
mysql> exit;
步骤6【重启mysql服务】:net start mysql80
步骤7:无密码登录,然后修改密码。
Step1:mysql -u root -p
Step2:use mysql;
Step3:ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';【此步关键,设置新密码】
Step4:flush privileges;【刷新】
Step5:exit;
Step6:mysql -u root -p 【二次登录验证】
(二)找回原来密码【操作上复杂】
即不修改原来密码,其目的是不影响其他人使用(存在root密码多个人掌握情况)。此种方式也属于逆向破解账户密码。
此法,必要性不强,但学习上略有必要。
方法一:
方法二:
1.2.2 修改root账户密码
此种方式,是在知晓root密码的情况下,修改root账户密码。作为一个优秀的MySQL数据库管理员,应当定期或不定期变更密码。
步骤1【登录root账户】:mysql -u root -p
步骤2【切换数据库】:use mysql;
步骤3【查看和修改密码】:
Step1【查看mysql数据库的表】: show tables;
Step2【查看user表结构,账户信息存于此】:desc user;
Step3【查看原有密码】:
方式1【不推荐】:select * from user;
方式2【查看所有账户密码】:select Host,User,authentication_string from user;
方式3【仅查看root账户密码】:select Host,User,authentication_string from user where user='root';
Step4【修改root密码】:ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';【此步关键,设置新密码】
Step6【刷新】:flush privileges;【此步非常关键,否则不能修改成功】
Step7【退出】:exit;
Step8【二次登录验证】:mysql -u root -p
1.2.3 重置一般账户密码
一般来说,一般用户或普通用户,不能够直接修改自身的密码,需要通过root账户进行修改。其原因是:一般账户不具有mysql.user表的操作权限。
mysql可以将mysql.user表的相应权限赋给一般账户,使得一般账户具有特定行的操作权限,使其一般账户可以修改自己的密码,但这样的权限也可以被拿掉,仅具有登录权限。
这样的账户也可成为管理员账户,具有了root账户部分权限,故要谨慎赋权。
方法一:用root账户修改,同上。
方法二:用一般账户修改自己密码
步骤1【登录root账户】:mysql -u OldUser -p
步骤2【切换数据库】:use mysql;
步骤3【查看和修改密码】:
Step1【查看mysql数据库的表】: show tables;
Step2【查看user表结构,账户信息存于此】:desc user;
Step3【查看原有密码】:
方式1【查看所有账户密码】:select Host,User,authentication_string from user;
方式2【仅查看OldUser账户密码】:select Host,User,authentication_string from user where user='OldUser';
Step3【修改root密码】:ALTER USER 'OldUser'@'localhost' IDENTIFIED BY 'NewPassword';【此步关键,设置新密码】
Step4【刷新】:flush privileges;【此步非常关键,否则不能修改成功】
Step5【退出】:exit;
Step6【二次登录验证】:mysql -u OldUser -p
2 Linux上密码重置
2.1 CentOS7服务查看、开启与关闭
这个是验证所安装的MySQL软件服务器mysqld是否正常开启了,否则MySQL根本无法使用。
前提:已经正确安装了MySQL,且正确配置了环境变量,是指mysql能够在Linux运行的环境。
步骤一:服务查看
方式1:service mysqld status
方式2:systemctl status mysqld.service
方式3:systemctl status mysqld
示例:
[root@WolHawk home]# systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Sun 2022-12-11 22:27:48 CST; 19s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 1601 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=2)
Process: 1572 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 1601 (code=exited, status=2)
Status: "Server startup in progress"
Dec 11 22:27:48 WolHawk systemd[1]: Failed to start MySQL Server.
Dec 11 22:27:48 WolHawk systemd[1]: Unit mysqld.service entered failed state.
Dec 11 22:27:48 WolHawk systemd[1]: mysqld.service failed.
Dec 11 22:27:48 WolHawk systemd[1]: mysqld.service holdoff time over, scheduling restart.
Dec 11 22:27:48 WolHawk systemd[1]: Stopped MySQL Server.
Dec 11 22:27:48 WolHawk systemd[1]: start request repeated too quickly for mysqld.service
Dec 11 22:27:48 WolHawk systemd[1]: Failed to start MySQL Server.
Dec 11 22:27:48 WolHawk systemd[1]: Unit mysqld.service entered failed state.
Dec 11 22:27:48 WolHawk systemd[1]: mysqld.service failed.
上述示例:是笔者关闭了
步骤二:服务开启
方式1:service mysqld start
启动失败示例:
service mysqld start
Redirecting to /bin/systemctl start mysqld.service
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
方式2:systemctl status mysqld.service
方式3:systemctl status mysqld
步骤三:服务关闭
方式1:service mysqld status
方式2:systemctl status mysqld.service
方式3:systemctl status mysqld
2.2 CentOS7密码重置
对于Linux上MySQL账户密码重置,首先就要明确MySQL是安装在什么用户之下。Linux是典型的多用户系统,每个账户均可安装MySQL,且将MySQL向用户组和其他账户开放权限。因此修改Linux下,必须明确要修改什么账户下MySQL的密码。虽然Windows也可采用多用户模式,但并不常见。其次要明确MySQL所安装的路径,虽然有其默认路径,通常在安装时会将其改变,笔者基于自身使用习惯,就会修改其所安装的路径。
2.2.1 忘记root账户密码
2.2.2 修改root账户密码
2.2.3 重置一般账户密码
浙公网安备 33010602011771号