今天进行数据库操作的时候不小心把root用户权限给降低了,用show grants;只能有一个usege了,运行use mysql都会报错,基本上除了登陆很多权限都没了。随便一个操作都会报错(诸如ERROR 1064 (42000)、ERROR 1044(42000): Access denied for user ''@'localhost' to database等等)找了很多解决办法,很多都是针对5.x版本的数据库的操作。一番操作下来不仅没有正确纠正过来反而搞的一团糟。
下面介绍如何恢复权限。
1、停止mysql服务器。使用skip-grant-tables 登陆。
详细说来就是
(1)在mysql安装目录下的bin目录下右键+shift->此处打开命令行窗口。
(2)首先暂停mysql服务(停止mysql服务是net stop mysql;启动mysql服务是net start mysql)
net stop mysql;
(3)执行下面的命令跳过权限表验证
mysqld --console --skip-grant-tables --shared-memory
(4)执行上面的命令之后就会卡住在某一个位置(下面的步骤全部执行成功后可以同时按Ctrl+C退出),此时就要重新打开一个新的窗口操作接下来的操作就都在新打开的命令行窗口执行了。首先也是在bin目录下右键+shift->此处打开命令行窗口。此时可以不用密码登陆了。直接运行mysql就可以登陆数据库。然后可以进行下面的操作。
2、 手动修改用户的权限。使其可以设置权限。
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
3、刷新缓冲区
FLUSH PRIVILEGES;
4、重新给root赋权
GRANT ALL ON *.* TO 'root'@'localhost';
最后再刷新一下缓冲区
FLUSH PRIVILEGES;
就可以quit退出来了。这个时候已经把权限给重新赋予给root了。此时就可以在窗口1按下Ctrl+C退出。再用net start mysql启动服务。重新用mysql -u root -p登陆数据库,查看权限就没有问题了。
关于修改密码:
就是将上面第2、3、4步的替换为
alter user 'root'@'localhost' identified by '新密码';
之后再运行
FLUSH PRIVILEGES;
就可以了。此外,如果普通的操作不行,就增加管理员权限打开命令提示符。