找回MySQL root密码的解决方案

数据库 MySQL
此文章主要向大家描述的是找回MySQL root密码的解决方案,我们大家都知道MySQL root密码的丢失或是遗忘,是一件很令人头痛的事情,以下的文章就是对其的解决。

以下的文章主要讲述的是在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就行了

 

然后

  1. #. /etc/rc.d/init.d/MySQL stop  
  2. #. /etc/rc.d/init.d/MySQL start  
  3. #MySQL -u root -p XXXXXX 

 

 

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

 

 

  1. MySQL>use MySQL  
  2. MySQL>update user set Password=PASSWORD('xxxxxx') where User='root'

 

 

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

 

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

 

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

 

 

  1. #chown -R MySQL:MySQL user.*  
  2. #chmod 600 user.*  
  3. //OK,DONE 

 

重起一下MySQL

 

重新连接

 

  1. MySQL>use MySQL  
  2. MySQL>update user set Password=PASSWORD('xxxxxx') where User='root';  
  3. MySQL>FLUSH PRIVILEGES; 

 

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

  1. MySQL>delete from user where User='';  
  2. MySQL>delete from user where Host='%';  
  3. MySQL>FLUSH PRIVILEGES; 

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

这个方法么就是有点局限性,你必须也具备另外的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 ,

  1. >use MySQL  
  2. >update user set passwordpassword=password("new_pass") where user="root";  
  3. >flush privileges; 

 

你也可以这样做:

  1. `MySQLadmin -h hostname -u user password 'new password''。 

 

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

5.killall -TERM MySQLd

 

6.用新密码登陆

 

其它方法二

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

 

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

 

 【编辑推荐】

  1. MySQL语句优化的原则简述
  2. MySQL索引和查询优化的实际操作
  3. MySQL数据库内存调优实操
  4. MYSQL DELETE语法的实际操作与代码
  5. MySQL存储过程中的基本函数描述
责任编辑:佚名 来源: 互联网
相关推荐

2010-05-28 19:39:28

MySQL 编码转换

2010-05-26 17:21:14

MySQL root密

2010-05-27 18:24:09

MySQL数据库密码

2010-06-04 17:11:07

MySQLroot密码

2010-06-07 17:09:20

MySQLroot密码

2010-05-18 16:50:58

MySQL root

2010-06-01 10:37:11

MySQL修改root

2010-07-26 10:04:43

SQL Server

2010-03-10 09:44:51

Linux找回根密码

2010-05-17 09:49:46

MySQL中文问题

2010-06-01 08:54:36

MySQL忘记root

2017-04-13 12:20:43

Mysqlroot密码

2010-04-06 18:47:26

CentOS系统

2009-12-22 11:08:13

Linux操作系统

2020-09-02 11:13:28

密码网络攻击网络安全

2009-10-28 13:50:16

Oracle密码丢失

2010-06-10 15:44:53

2010-06-09 17:26:54

2010-05-17 14:49:43

MySQL中文乱码

2010-04-28 11:48:13

Oracle MySQ
点赞
收藏

51CTO技术栈公众号