误操作把root权限清掉导致数据库无法登录(确实很难受),在网上找了很多方法,发现没有很行之有效的方法,在多方尝试终于找到了适合敏感宝宝体质的方法。
C:\Users\Administrator>mysql -u root -P3307
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
以下所有操作均在mysql安装目录的bin目录下操作
首先,在mysql跳过权限表的验证
1)打开cmd,此处可以在文件地址框中直接输入cmd,则会在当前目录打开cmd
2)将mysql服务停止
net stop mysql
切记此处没有分号.
3)执行下列命令跳过权限验证
mysqld --console --skip-grant-tables --shared-memory
4)经过上列操作后会卡在一个位置,再打开另一个新的窗口进行操作
5)直接输入mysql,则会进入到数据库中
之后在mysql中进行操作
1)确认 root
用户的主机权限
SELECT User, Host FROM mysql.user;
如图可以看到我的root对应host:
root
用户可以从任意主机(%
)连接。root
用户还可以从localhost
连接
2)直接更新用户表
a)更新 mysql.user
表
INSERT INTO mysql.user (Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections, plugin, password_expired, account_locked)
VALUES ('%', 'root', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', 'N', 'N')
ON DUPLICATE KEY UPDATE authentication_string='', plugin='mysql_native_password';
b)刷新权限
FLUSH PRIVILEGES;
最后,进行授予权限并重新启动mysql服务
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';
FLUSH PRIVILEGES;
全部完成就可以quit退出了,启动mysql复位
net start mysql
重新用mysql -u root -p登陆数据库,查看权限就没有问题了。对于我遇到的情况有效,目前已解决,当然遇到报错被拒绝请先考虑是否是数据库密码忘记了,之后再回忆是否把root权限失误操作然后降低。