视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
找回MySQLroot密码的解决方案
2020-11-09 13:16:44 责编:小采
文档


以下的文章主要讲述的是在LINUX操作系统下装MySQL数据库之后,不小心把MySQL ROOT的密码弄丢或是在修改初始密码时,忘记了新的密码的实际解决方案,下面就是具体方案的描述,希望在你今后的学习中会有所帮助。 因为MySQL密码存储于数据库MySQL中的user表中所


以下的文章主要讲述的是在LINUX操作系统下装MySQL数据库之后,不小心把MySQL ROOT的密码弄丢或是在修改初始密码时,忘记了新的密码的实际解决方案,下面就是具体方案的描述,希望在你今后的学习中会有所帮助。

因为MySQL密码存储于数据库MySQL中的user表中所以只需要将我windows 2003下的MySQL中的user表拷贝过来覆盖掉就行了

在c:\MySQL\data\MySQL\(linux 则一般在/var/lib/MySQL/MySQL/)目录下有三个user表相关文件user.frm、user.MYD、user.MYI

user.frm //user表样式文件

user.MYD //user表数据文件

user.MYI //user表索引文件

为保险起见,三个都拷贝过来,不过其实如果之前在要恢复的那个MySQL上没有更改过表结构的话,只要拷贝user.MYD就行了

然后

#./etc/rc.d/init.d/MySQLstop #./etc/rc.d/init.d/MySQLstart
#MySQL-uroot-pXXXXXX

好了,可以用windows 2003下MySQL密码登陆了

MySQL>useMySQL MySQL>updateusersetPassword=PASSWORD('xxxxxx')whereUser='root';

这时候会出错,提示user表只有读权限

我分析了一下原因,只这样的,因为user.*文件的权限分配是windows 2003下的,在windows 2003下我ls -l一看权限是666

在linux下我一看,拷过来后权限变成了600(其实正常情况下600就行了,只不过这里的文件属主不是MySQL,拷过来后的属主变为了MySQL root,所以会出现权限不够,这时候如果你改成权限666则可以了,当然这样不好,没有解决问题的实质),在/var/lib/MySQL/MySQL/下ls -l看了一下

#chown-RMySQL:MySQLuser.* #chmod600user.*
//OK,DONE

重起一下MySQL

重新连接

MySQL>useMySQL MySQL>updateusersetPassword=PASSWORD('xxxxxx')whereUser='root';
MySQL>FLUSHPRIVILEGES;

有一点值得注意:如果你windows 下MySQL如果是默认配置的话,注意要还要执行

MySQL>deletefromuserwhereUser=''; MySQL>deletefromuserwhereHost='%';
MySQL>FLUSHPRIVILEGES;

好了,到这里恢复密码过程就完成了

这个方法么就是有点局限性,你必须也具备另外的user表文件

其他还有几种方法

其它方法一(这个是网上流传较广的方法,MySQL中文参考手册上的)

1. 向MySQLd server 发送kill命令关掉MySQLd server(不是 kill -9),存放进程ID的文件通常在MySQL的数据库所在的目录中。

killall -TERM MySQLd

你必须是UNIX的MySQL root用户或者是你所运行的SERVER上的同等用户,才能执行这个操作。

2. 使用`–skip-grant-tables’ 参数来启动 MySQLd。 (LINUX下/usr/bin/safe_MySQLd –skip-grant-tables , windows下c:\MySQL\bin\MySQLd –skip-grant-tables)

3. 然后无密码登录到MySQLd server ,

>useMySQL >updateusersetpasswordpassword=password("new_pass")whereuser="root";
>flushprivileges;

你也可以这样做:

`MySQLadmin-hhostname-uuserpassword'newpassword''。

4. 载入权限表: `MySQLadmin -h hostname flush-privileges’ ,或者使用 SQL 命令`FLUSH PRIVILEGES’。

5.killall -TERM MySQLd

6.用新密码登陆

其它方法二

直接用十六进制编辑器编辑user.MYD文件

不过这个里面我要说明一点,我这里编辑的时候发现个问题,加密的密码串有些是连续存储的,有些的最后两位被切开了,后两位存储在后面其他地方.这一点我还没想明白.还有注意一点就是编辑的是加密过的密码串,也就是说你还是需要另外有user表文件。这种方法和我最上面介绍的方法的区别在于,这种方法直接编辑linux下的user表文件,就不需要重新改文件属主和权限了

下载本文
显示全文
专题