今日在开发时突然发现MySQL不能使用了,一看日志发现是连接获取不到,赶紧查看User表,发现常用的insert,select,update,delete,create,drop授权全都没有了,而且这是一个root账户,查看了网上的解决方案,使用skip-grant-tables参数启动后授权仍然提示报错
1 2 3 |
The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement. |
最后还是使用了一个笨办法,为了保证不影响其它数据库,将没有授权的User的数据文件重命名为User1,移至另一台MySQL上,数据文件包括frm,myd,myi,此时需要注意,新的文件导入后用户组已经不是mysql组,并且权限也不对,需要执行如下shell
1 2 3 4 |
chown mysql.mysql tablename.* chmod 660 tablename* |
然后执行如下SQL
1 2 3 |
update user set Insert_priv = 'Y', Update_priv = 'Y', Delete_priv = 'Y', Create_priv = 'Y', Drop_priv = 'Y' where user = 'root'; |
将User1重命名回User覆盖原库文件,执行如下shell
1 2 3 |
service mysqld start |
进入MySQL命令行后,再执行授权并刷新
1 2 3 4 |
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; flush privileges; |
一般用户到这一步基本就可以正常使用了,如果还不行那么请执行mysql_upgrade,再重启MySQL即可.