当前位置: 首页 > 图文教程 > 数据库 > MYSQL > 把我的密码还给我 MySQL中的密码恢复

MYSQL
MYSQL常用命令与实用技巧
用mysqldump备份和恢复指定表的方法
MYSQL常见出错代码对照
dmysql自己封装的mysql库
虚拟主机MySQL数据库的备份与还原的方法
推荐没有虚拟主机的小巧的Mysql数据库备份脚本(PHP)
MySQL数据库备份方法说明
asp采用ODBC接口访问MySQL的方法
找到一种不错的从SQLServer转成Mysql数据库的方法
MySQL UDF调试方式debugview的相关方法
使用dreamhost空间实现MYSQL数据库备份方法
MYSQL导入导出命令详解
MYSQL命令行模式管理MySql的一点心得
解决MySQL数据库中文模糊检索问题的方法
Mysql以utf8存储gbk输出的实现方法提供
mysql连接过多和死掉以及拒绝服务的解决方法
在MySQL数据库中复位根用户的密码的方法
mysql数据库查询优化 mysql效率
MySQL数据库的出错代码列表
MySQL 1067错误解决方法集合

MYSQL 中的 把我的密码还给我 MySQL中的密码恢复


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 88 ::
收藏到网摘: n/a

在LINUX下装了MYSQL,刚装完的时候把ROOT空密码改了,当时也改了个好记的密码,没想到过了一个小时就忘记了,于是有了这篇恢复密码过程笔记。

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

在c:mysqldatamysql(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/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表只有读权限

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

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

 #chown -R mysql:mysql user.*

 #chmod 600 user.*

//OK,DONE

重起一下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命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。

killall -TERM mysqld

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

2. 使用`--skip-grant-tables' 参数来启动 mysqld。 (LINUX下/usr/bin/safe_mysqld --skip-grant-tables , windows下c:mysqlinmysqld --skip-grant-tables)

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

>use mysql

>update user set password=password("artian") where user="root";

>flush privileges;

。你也可以这样做:`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表文件,就不需要重新改文件属主和权限了。