日期:2014-05-16  浏览次数:20815 次

mysql root用户没有超级权限或忘记密码
参考文章:http://www.ixdba.net/article/2f/1293.html

  今天用mysql源码建立了一个数据库,然后通过root用户,空密码登录进行,然后用命令 use mysql 跳转到mysql用户下,然后对user表进行update操作来修改root用户的密码,update完了以后执行了 flush privileges 命令刷新mysql系统表,exit出来后,想用新密码登录进去试试,发现密码没有修改成功,root用户还是空密码,通过show databases命令 也只能看到 以下两个用户
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+

网上找了半天,发现是root用户已经失去了超级权限,所以只能看到root用户自己的数据库。
mysql数据库找不到,就不能登陆到user表改用户的权限。网上一种解决方法
通过--skip-grant-table启动 可以忽略权限
# ./mysqld start --skip-grant-table
# mysql -uroot -S/home/mysqlData/mysqld.sock
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.03 sec)

以上步骤就解决了此问题


今天新建了mysql数据库 想修改root用户密码,于是执行了update user set password = '111111' where user='root';
执行完成后exit出来,重新用root用户登录就登陆不了了。 只能通过--skip-grant-table 的启动模式来登陆进去。
后来终于发现 user表中的用户密码都是加密过的,要通过update user set password = password('111111') where user='root';这样写才能改密码成功
总结出来自己太菜了,同时发现 --skip-grant-table  启动模式对于忘记root密码或者mysql中root用户,直接用# mysql -S/home/mysqlData/mysqld.sock 就能登陆了,不用输入用户名和密码。登陆进去后有超级权限。(-S/home/mysqlData/mysqld.sock  用于一台机器双mysql数据的时候,指定连接哪个数据库的)