MySQL root用户密码忘记怎么办(Reset root account password)

在使用MySQL数据库的的过程中,不可避免的会出现忘记密码的现象。普通用户的密码如果忘记,可以用更高权限的用户(例如root)进行重置。但是如果root用户的密码忘记了,由于root用户本身就是最高权限,那这个方法就行不通了。本文介绍2种在忘记root用户用户密码的情况下,如何进行重设。

文章目录
  • 一、使用--init-file参数重设
    • [1.1 停止mysql进程](#1.1 停止mysql进程)
    • [1.2 创建初始化文件](#1.2 创建初始化文件)
    • [1.3 使用init-file参数重启数据库](#1.3 使用init-file参数重启数据库)
  • 二、使用--skip-grant-tables参数重设
    • [2.1 停止mysqld进程](#2.1 停止mysqld进程)
    • [2.2 使用skip-grant-tables重启数据库](#2.2 使用skip-grant-tables重启数据库)
    • [2.3 修改root密码](#2.3 修改root密码)
    • [2.4 重启数据库](#2.4 重启数据库)

一、使用--init-file参数重设

由于忘记了root密码,我们是无法通过root用户连接到数据库的,因此也无法通过客户端执行alter user或set password命令来重置密码。MySQL提供了init-file参数,在启动时可以读取文件,我们将修改root用户密码的SQL放在文件中,通过重启来执行修改密码命令。

假设我想要将root密码修改为'abc123',先测试一下,密码是不对的:

复制代码
mysql -uroot -pabc123

1.1 停止mysql进程

下面演示的是通过kill命令杀死mysqld进程,如果可以正常停止也可以。

首先通过ps -ef | grep mysqld 查询mysql数据库的进程号:

复制代码
ps -ef | grep mysqld

这里显示数据库相关的进程有2个(第3个是grep命令),由于我是通过mysqld_safe脚本启动的数据库,因此有一个额外的守护进程:

进程号为23619的mysqld_safe守护进程,负责监控mysqld的状态

进程号为24846的mysqld进程,这个是数据库服务进程(它的父进程号23619)

查询到进程号后,使用kill命令依次将mysqld_safe和mysqld杀死,注意要先杀mysqld_safe,如果先杀mysqld,那么守护进程检测到mysqld进程挂了,会立刻将mysqld重新启动:

复制代码
kill -9 23619
kill -9 24846

如果只有一个mysqld进程,那么只要将其杀掉即可。

1.2 创建初始化文件

创建一个文本文件,名称随意(这里是reset_password.sql),里面写上更改root密码的SQL:

复制代码
alter user 'root'@'localhost' identified by 'abc123';

文件创建后给mysql用户增加读取权限(通常使用操作系统的mysql用户来启动数据库进程)

复制代码
chmod a+r reset_password.sql

1.3 使用init-file参数重启数据库

使用--init-file=/root/reset_password.sql 参数启动数据库,启动时会自动执行文件种的密码修改SQL:

复制代码
mysqld_safe --init-file=/root/reset_password.sql &
mysql -uroot -pabc123

可以看到启动后,root用户的密码已经成功被修改为'abc123',最后将reset_password.sql文件删除即可。

二、使用--skip-grant-tables参数重设

MySQL的skip-grant-tables参数可以指定在启动时忽略权限认证,这意味着任何用户都可以不用密码登陆数据库,并且具有所有权限,这是一个危险的状态。因此当使用skip-grant-tables启动时,MySQL会自动启用skip-networking参数,禁止所有远程连接。

2.1 停止mysqld进程

停止或杀掉mysqld进程,参照上一节内容。

2.2 使用skip-grant-tables重启数据库

使用skip-grant-tables参数启动数据库,并使用root用户登陆:

复制代码
mysqld_safe --skip-grant-tables &
mysql -uroot -p

这里提示了Enter password:,但实际是不需要输入密码的,直接回车便可登陆。

2.3 修改root密码

加载权限表并修改root密码,这里将密码修改为abc456:

复制代码
flush privileges;
alter user 'root'@'localhost' identified by 'abc456';

2.4 重启数据库

使用正常状态重启数据库

复制代码
mysqladmin shutdown
mysqld_safe &
mysql -uroot -pabc456

可以看到root用户的密码成功被修改为abc456

以上即是MySQL在忘记root用户密码的两种修改方式,希望对你有帮助。

相关推荐
0xDevNull3 小时前
MySQL数据冷热分离详解
后端·mysql
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希4 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神4 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员4 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿5 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴5 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存