免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 5970 | 回复: 34
打印 上一主题 下一主题

mysql忘记root密码,使用绕过密码的方法收到的杯具结果 [复制链接]

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-06 17:55 |只看该作者 |倒序浏览
忘记ROOT密码时
1.停掉mysql服务,或者killall -TERM mysqld
2.mysqld_safe --skip-grant-tables &   启动mysql;这样mysql将允许任何人以root用户和空密码访问mysql服务器!(需断网操作,或尽快操作)
3.        #mysql
        mysql>use mysql;
        mysql>update user set password=password('new_pass') where user="root";
        mysql>flush privileges;
        mysql>exit
4.重启mysql服务

然后连接mysql的时候用root帐户确实不需要密码了,但是登录以后
>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.01 sec)

连mysql库都看不到,于是我
>show grants;
+--------------------------------------+
| Grants for @localhost                |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+
1 row in set (0.01 sec)

杯具,所有的权限都没有了,我reboot,我尝试清除密码之前的密码,都不行
这还有招吗

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
2 [报告]
发表于 2012-03-06 18:29 |只看该作者
坐等版主

论坛徽章:
0
3 [报告]
发表于 2012-03-06 18:44 |只看该作者
回复 2# royzs
奇怪呢!从你的show grants;来看你所用的是""@localhost这个匿名用户, 并不是任务主机连接的root用户。
从你的更新语句来看,你更新了所有的root用户,尝试用
mysql -uroot -p登录看一下呢。

   

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
4 [报告]
发表于 2012-03-06 18:51 |只看该作者
回复 3# RogerZhuo


    我注意到你说“所有的root用户”,难道mysql上面有多个root用户吗

下面是我按照你说的操作的,其实我上次也是这么操作的

[root@www ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.0.95 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show grants;
+--------------------------------------+
| Grants for @localhost                |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+
1 row in set (0.13 sec)

mysql>

论坛徽章:
0
5 [报告]
发表于 2012-03-06 19:16 |只看该作者
回复 4# royzs


    mysql是以mysql.user表中host和user(也是此表的pk)来标识一个用户的, 表示从哪台主机连接mysql server的用户。

如'root'@'localhost' , 'root'@'%'为两个不同用户, 还有匹配是user, host来排序的,(当这两个用户都存在),也就说如果用mysql -uroot -p登录,
这时是会匹配'root'@'localhost'.

不过,你这个真不知道是什么原因。

你查下
SELECT USER(),CURRENT_USER();


坐等高手来解决 吧!!!

论坛徽章:
0
6 [报告]
发表于 2012-03-06 20:55 |只看该作者
回复 4# royzs


    应该知道是什么原因了,是我把验证的流程理解错了。

你再用mysqld_safe --skip-grant-tables &来重新启动,按照你的步骤执行

INSERT INTO mysql.USER(HOST,USER,PASSWORD,select_priv,Super_priv,Grant_priv,Create_user_priv) VALUES ('localhost','zhuo',PASSWORD('123'),'Y','Y','Y','Y');
FLUSH PRIVILEGES;(如果你重新启动就不用这步)

重新启动mysql.


在mysql所在的机子上,用mysql -uzhuo -p123来登录,你可以创建你想要的用户,当然你想为用户zhuo@localhost用户给全部的权限 也可以。


试试吧。

原理:
连接匹配是按照host, user来排序的, 因为你的'root'@'localhost'用户不存在, 所以就只有''@'localhost'这个匿名用户连接上来了。


论坛徽章:
0
7 [报告]
发表于 2012-03-06 21:00 |只看该作者
成功你再运行下面这个查询,就可以知道为什么了。
select * from mysql.user where user="" or user="zhuo" or user="root" order by host;

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
8 [报告]
发表于 2012-03-07 09:19 |只看该作者
回复 5# RogerZhuo


mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | @localhost     |
+----------------+----------------+
1 row in set (0.00 sec)

mysql>


奇怪,当前用户为什么是空

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
9 [报告]
发表于 2012-03-07 09:23 |只看该作者
回复 6# RogerZhuo


    [root@www ~]# /etc/init.d/mysqld stop
Stopping MySQL:                                            [  OK  ]
[root@www ~]# mysqld_safe --skip-grant-tables &
[1] 3403
[root@www ~]# Starting mysqld daemon with databases from /var/lib/mysql

[root@www ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.95 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> INSERT INTO mysql.USER(HOST,USER,PASSWORD,select_priv,Super_priv,Grant_priv,Create_user_priv) VALUES ('localhost','zhuo',PASSWORD('123'),'Y','Y','Y','Y');
ERROR 1146 (42S02): Table 'mysql.USER' doesn't exist
mysql>

按照你的提示,先stop,然后mysqld_safe --skip-grant-tables &
然后执行
出现这个,mysql.USER 不存在

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
10 [报告]
发表于 2012-03-07 09:26 |只看该作者
回复 6# RogerZhuo


    mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
17 rows in set (0.00 sec)

mysql>

确实没有那个表的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP