三种方法恢复MySQL密码
方法一
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表文件中的密码串拷贝过来。
(注:加密的密码串有些是连续存储的,有些的最后两位被切开了,后两位存储在后面其他地方)
相关文章阅读
喜欢这篇文章?
订阅我的RSS,就可以自动获取最新内容了!
Tags:Mysql.
评论数量: 1条评论
引用: http://www.i4wei.com/2009/07/922/

Like





好方法!!!