July
4th
2009

三种方法恢复MySQL密码

实用技巧 1条评论

评分: 很差劲不怎样还可以还不错太棒了
Loading ... Loading ...

方法一

MySQL的密码是存储在数据库mysql中的user表中,我们需要在windows 2003下安装一个新的MySQL,然后将这个MySQL中的user表拷贝过来覆盖。

在MySQL的安装目录的 data\mysql\ 目录下有三个user表相关文件
user.frm //user表样式文件
user.MYD //user表数据文件
user.MYI //user表索引文件
将三个都拷贝过来(不过其实如果之前在要恢复的那个MySQL上没有更改过表结构的话,只要拷贝user.MYD就行了)
然后运行

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

现在用windows 2003下的MySQL密码登陆

mysql>use mysql;
mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;

这时候会出错,提示user表只有读权限。这是因为在windows 2003下user.*文件分配的权限是666,拷贝到后权限变成了600。其实正常情况下600是可以运行的,只是这些文件拷过来后的所有者是root,所以会出现权限不够警告,需要使用以下命令

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

重起一下MYSQL后重新进入数据库

mysql>use mysql;
mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;
mysql>FLUSH PRIVILEGES;

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

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

到此恢复密码过程就完成了。这个方法局限性在于,你必须具备另外的user表文件。

方法二(这个是网上流传较广的方法,是mysql中文参考手册上的)

1. 向mysqld server 发送kill命令关掉mysql server(不是 kill -9)。

killall -TERM mysqld

你必须是root用户或者是mysql权限的所有者,才能执行这个操作。

2. 使用–skip-grant-tables参数来启动 mysqld。

Linux下

/usr/bin/safe_mysqld –skip-grant-tables

Windows下

c:\mysql\bin\mysqld –skip-grant-tables

3.  无密码登录到mysql server

mysql>use mysql;
mysql>update user set password=password(”new_pass”) where user=”root”;
mysql>flush privileges;

也可以使用命令:

#mysqladmin -h hostname -u user password ‘new password’
#mysqladmin -h hostname flush-privileges

4. 使用命令
killall -TERM mysqld

5. 重新启动MySQL,用新密码登陆

方法三

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

需要注意的是编辑的是加密过的密码串,你需要将Windows 2003上MySQL的user表文件中的密码串拷贝过来。

(注:加密的密码串有些是连续存储的,有些的最后两位被切开了,后两位存储在后面其他地方)

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Twitter
  • Live
  • LinkedIn
  • Yahoo! Bookmarks
  • RSS
  • email
  • Print
  • PDF

相关文章阅读

喜欢这篇文章?订阅我的RSS,就可以自动获取最新内容了!

Tags:.
评论数量: 1条评论
引用: http://www.i4wei.com/2009/07/922/


  1. July 5th, 2009 at 20:06 | #1

    好方法!!!

  1. 还没有trackbacks.