游乐游手机版
首页/网络安全/文章详情

MySQL密码忘记后恢复方法教程

时间:2026-07-23 06:31
MySQL密码存于mysql库用户表。恢复方法有三:复制用户表文件(需调权限)、使用--skip-grant-tables绕过(最通用)、十六进制编辑用户表数据文件(需备份)。操作前必须停止MySQL服务,完成后执行刷新权限命令。注意操作前务必先备份数据。

MySQL密码恢复,乍一看似乎非常棘手,但核心逻辑其实很简单——所有密码信息都存储在数据库mysql下的user表里。只要明确这个位置,后续操作无非是如何将正确的凭证写入该表。下面分享几种经过大量实战验证的恢复方案,从最“直接粗暴”到最“优雅稳妥”,大家可以根据自己的场景灵活选择。

方法一:直接拷贝 user 表文件(Windows→Linux)

如果你手头有一台Windows机器上的MySQL,并且拥有足够的权限,最直接的方法就是把user表的三个文件复制过来覆盖。在c:\mysql\data\mysql\(Linux下通常位于/var/lib/mysql/mysql/)下,能找到这三个关键文件:

  • user.frm——表结构定义
  • user.MYD——实际数据
  • user.MYI——索引

保险起见三个文件都复制过去,不过如果目标机器没有修改过表结构,实际上只需复制user.MYD即可。接下来执行以下操作:

# /etc/rc.d/init.d/mysql stop
# /etc/rc.d/init.d/mysql start
# mysql -u root -p XXXXXX

此时应该能用Windows下的密码登录。但别高兴太早,很可能遇到这样的错误:

mysql> use mysql;
mysql> update user set Password=PASSWORD('xxxxxx') where User='root';
ERROR 1036 (HY000): Table 'user' is read only

原因很明确——Windows下user.*文件的权限为666,复制到Linux后变成600,并且文件所有者变成了root,而不是mysql用户。解决方法就是修正所有者与权限:

# chown -R mysql:mysql user.*
# chmod 600 user.*

重启MySQL再次尝试,修改密码即可成功。最后别忘记执行以下清理命令,因为Windows默认配置可能包含匿名用户或者允许任意主机登录:

mysql> delete from user where User='';
mysql> delete from user where Host='%';
mysql> FLUSH PRIVILEGES;

到此,密码恢复完成。不过这个方法有明显的局限性——你需要有一份现成的user表文件才能操作。

方法二:使用 –skip-grant-tables 参数(最通用)

这个思路在MySQL官方中文参考手册中就有记载,也是网络上流传最广的恢复方法。核心思想是绕过权限表启动服务器,然后重置密码。

具体步骤:

  1. 先关闭mysqld进程(注意使用kill -TERM,不要用-9):
    killall -TERM mysqld
  2. --skip-grant-tables参数启动:
    Linux下:/usr/bin/safe_mysqld --skip-grant-tables
    Windows下:c:\mysql\bin\mysqld --skip-grant-tables
  3. 此时无需密码即可直接登录MySQL:
    mysql -u root
  4. 执行密码修改命令:
    use mysql;
    update user set password=password('new_pass') where user='root';
    flush privileges;
  5. 或者直接使用命令行工具:
    mysqladmin -h hostname -u user password 'new password'
  6. 重新加载权限表:
    mysqladmin -h hostname flush-privileges 或 SQL 命令 FLUSH PRIVILEGES;
  7. 再次杀掉mysqld,然后正常启动,用新密码登录。

这个方法不需要额外文件,任何MySQL版本都适用,强烈推荐作为首选方案。

方法三:直接编辑 user.MYD 文件(十六进制编辑)

如果你不想重启服务,又恰好拥有另一个环境下的user表文件,可以尝试直接修改Linux下的user.MYD文件。用十六进制编辑器打开,找到加密密码串的位置,替换成你已知的密文。

不过这里有一个陷阱:加密后的密码串在文件里并不是连续存储的——有些情况下最后两个字节会被切到后面别的位置。这一点我至今没完全想明白,所以操作时一定要备份原文件。另外注意,你需要事先知道新密码对应的加密串(比如从另一台机器上提取出来)。这种方法与方法一的区别在于:不需要重新设置文件所有者与权限,直接在原文件上动手即可。

以上三种方法各有利弊。场景一适合你有现成备份文件的情况;场景二最稳妥,建议优先尝试;场景三适合喜欢钻研底层数据的极客。无论选择哪种,记得操作前先停止MySQL服务,操作后务必执行FLUSH PRIVILEGES。密码安全无小事,谨慎操作总没错。

来源:https://www.jb51.net/hack/5095.html
上一篇EXCMS 0day漏洞精彩过程详解 下一篇网络安全宣传意义与手把手攻防操作记录
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
零基础Python网络安全学习指南,包住宿实战培训
网络安全 · 2026-07-25

零基础Python网络安全学习指南,包住宿实战培训

先抛出几个核心判断:网络安全人才缺口确实已经超过70万。这个数字不算夸张,各大招聘网站上安全岗位的薪资涨幅和需求增长都是实实在在的。但实话实说,行业真正缺的是能上手干活的人,不是只懂几个理论概念的新手。因此,一套扎实且成体系的训练方案,对于零基础转行或进阶提升就显得格外关键。 从零基础到能够独立应对

网络安全定义与核心概念详解
网络安全 · 2026-07-25

网络安全定义与核心概念详解

谈到网络安全,不同组织与标准体系对其定义虽有差异,但核心目标高度统一:保护信息与系统不受威胁侵害。以下梳理几种主流定义—— 什么是网络安全? 国际标准化组织(ISO)在ISO-74982文献中将安全定义为:最大程度地降低数据和资源遭受攻击的可能性。该定义虽简短,却精准点出安全的本质——即风险控制。

IIS 7.0网站漏洞利用与修复方法指南
网络安全 · 2026-07-25

IIS 7.0网站漏洞利用与修复方法指南

先来聊聊当前网络安全领域比较流行的一种实战技巧——以PHP环境为例,详细讲解图片马合并与解析漏洞利用的具体操作步骤。整个过程并不复杂,但细节往往决定成败,大家跟着流程逐步操作即可。 合并一张PHP一句话图片马 首先,我们需要将一句话木马脚本与一张正常图片合并,生成一个看似无害的图片文件。合并方式主要

织梦管理系统后台查找功能教程
网络安全 · 2026-07-25

织梦管理系统后台查找功能教程

通过SQL注入漏洞获取织梦CMS(DedeCMS)管理员密码后,满怀期待地准备进入后台,却发现怎么也找不到登录入口——这种情况其实相当常见。别着急,这里有一个实用的技巧值得尝试。 直接在网站地址后面添加以下路径: include dialog select_media php?f=form1 mur

微软IE浏览器BrowseDialog类(ccrpbds6.dll)拒绝服务安全漏洞深度分析
网络安全 · 2026-07-25

微软IE浏览器BrowseDialog类(ccrpbds6.dll)拒绝服务安全漏洞深度分析

BrowseDialog Class (ccrpbds6 dll) 导致 Internet Explorer 拒绝服务漏洞分析 该漏洞的PoC(概念验证代码)实现极为直接——触发浏览器崩溃的条件简单得令人意外。测试环境采用Windows XP Professional SP2(已安装全部补丁)并运行