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用户密码的两种修改方式,希望对你有帮助。

相关推荐
zyseo85 小时前
谷歌SEO 准首页词挖掘脚本:找出排在第 8-20 名的隐藏流量
大数据·数据库·人工智能
xiaogai_gai7 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python
数据工匠老o7 小时前
异构数据库DDL同步:260条链路的结构变更自动适配方案
数据库·架构
L0018 小时前
MySQL5.7 DATE 字段无法设置默认日期?用触发器搞定|个人任务清单项目实战
mysql
这个DBA有点耶8 小时前
银行业市占率最高的国产数据库是谁?先搞清楚“市占率”的四种口径
数据库·程序员·架构
用户6279947182629 小时前
南大通用GBase 8a之基于审计日志的冷温热数据分析
数据库
数据库小学妹9 小时前
数据库运维五级成熟度:监控、备份、高可用怎么串起来
运维·数据库·监控
一个天蝎座的程序猿9 小时前
为了给报表提速,我把金仓KES的列存储折腾了个遍:聊聊KES的技术能力
数据库
飞越未来云城的霓虹飞猪9 小时前
AI 数据库地图:从 PostgreSQL 到向量数据库,一次看懂 AI 时代的数据底座
数据库
不像程序员的程序媛9 小时前
导出mysql数据结构
数据库·mysql