找回MySQL root密码的解决方案 (找回mysql操作日志)

技术教程 2025-05-06 09:49:59 浏览
找回mysql操作日志

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

然后

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

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

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

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

重起一下MySQL

重新连接

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

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

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

你也可以这样做:

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

5.killall -TERM MySQLd

6.用新密码登陆

找回MySQL

其它方法二

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

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

【编辑推荐】


MySQL密码正确却无法本地登录怎么办

MySQL root密码正确,却怎么也无法从本地登录MySQL,提示 1 ERROR 1045 (): Access denied for user root@localhost (using passWORD: YES) 这里后来经高人指点才发现mysql库中的user表缺少一个root指向host:localhost的数据项,只有一个root指向host:主机名的数据项,故怎么也无法利用root账户登录MySQL。 总结一点就是root账户缺失了访问localhost主机的账户信息,导致无法本地登录。 那有什么办法恢复root登录呢? 这里记录一下今天遇到的纠结事情: 首先kill掉MySQL进程然后在启动mysql的参数中加入 --skip-grant-tables 会发现这时无密码就可以登录mysql了。 当然我们还必须修复root账户丢失的数据项。 这里有两种解决方案: 第一种是因为root账户初始的时候有3条记录,包含root对应localhost,hostname,127.0.0.1三条账户数据,我们可以update host为其他两项中一项为localhost即可。 第二种是直接insert一条记录,host为localhost即可 总结一下:即使root的host包含了主机名,127.0.0.1那么依然是无法正常登录的,这里必须要有localhost的host才行。 如果上面办法还是无法正常登录我们可尝试另一种办法 在本地用mysql命令直接回车可以进入mysql,但是里面只有test和information_schema数据库,没有mysql等数据库,使用use mysql报如下错: mysql> use mysql ERROR 1044 (): Access denied for user @localhost to;+——+——————-+——————————————-+| user | host | password |+——+——————-+——————————————-+| root | % | *A50E066ECF4142 || root | centos | *A50E066ECF4142 || root | 127.0.0.1 | *A50E066ECF4142 |+——+——————-+——————————————-+3 rows in set (0.12 sec)发现user表host字段中没有localhost,但是我的理解是%代表所有的主机都能登录的,为什么localhost不能呢,同样的情况我在5.0.45版的mysql上面做实验就不会发生localhost无法登录,我当前用的是5.1.57版的,难道是版本的问题? 接下来的修改很明显了:代码如下mysql> update user set host=localhost where user=root and host=%;mysql> flush privileges; OK,退出mysql,重启mysql就解决问题了。

root密码的解决方案

怎么恢复mysql的root密码

C:\Program Files\MySQL\MySQL Server 5.0\bin

在mysql安装目录下找到 重新配置下服务器就可以 你试下

linux mysql 忘记root密码怎么登陆

1、需要root账号登录系统,不用登录mysql;2、修改/etc/,在[mysqld]的段中加:skip-grant-tables3、重新启动mysqld:/etc/init.d/mysqld restart4、现在可以修改MySQLroot密码 :/usr/bin/mysqlmysql> USE mysql ;mysql> UPDATE user SET Password = password ( new-password ) WHERE User = root ;mysql> flush privileges ;mysql> quit5、将MySQL的登录设置修改回来# vi /etc/[mysqld]的段中的skip-grant-tables删除保存并且退出vi,重启mysql。 更多Linux操作知识,可以网络《Linux就该这么学》。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐