长时间没有使用服务器了,服务器上mysql数据库密码忘记了,找了很多文章,最后 按照这个文章解决了
1. 修改配置文件,目的是绕过登陆拥有root权限进数据库
vim /etc/my.cnf # 打开配置文件 然后在[mysqld]下方插入以下一句话
skip-grant-tables # 这句话的意思是跳过登录
# 然后保存退出
systemctl restart mysqld # 重启mysql服务
mysql -u root -p
# 此时不用输入密码 直接回车就可进入
use mysql; # 切换数据库
update user set authentication_string=password("123456") where user='root'; # 更新密码
ps: 5.6及以下版本的mysql 把命令中的 'authentication_string' 改成 'password' 就行了
2. 如果没有root用户就需要新增root 用户
先查询
select user,host authentication_string from user; #5.7及以上mysql版本 查询user表内容
如果有root用户 那么跳过2。直接3
如果没有 那么看下面,先创建
create user 'root'@'localhost' identified by '123456';
如果此步骤报以下错误:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
则运行:(不报错的就跳过)
flush privileges;
再次运行:
create user 'root'@'localhost' identified by '123456';
如果还报错,则运行:(不报错的就跳过)
drop user 'root'@'localhost';
再再次运行:(应该是不会报错了,报错当我没说)
create user 'root'@'localhost' identified by '123456';
3.然后赋予root用户权限:
grant all privileges on *.* to 'root'@'localhost' with grant option;
flush privileges;
exit;
4.修改配置文件回来 把/etc/my.cnf中的那句话注释掉
vim /etc/my.cnf
#skip-grant-tables
# 保存并退出
systemctl restart mysqld # 重启mysql服务
# 再次尝试登录
mysql -u root -p
# 输入刚刚重新设置的密码 即可登录成功
5. 赋予root用户远程登陆权限,即本地可以访问服务器上的mysql(方便本地调试)
# 首先需要登录到mysql
use mysql; # 切换数据库
update user set host='%' where user='root'; # 允许root用户远程登录
flush privileges; # 刷新权限
如果提示ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’ 错误,说明有多个ROOT用户纪录在USER表中了
select host from user where user = 'root';
查看一下host是否已经有了%这个值,有了就可以了.
然后刷新权限: flush privileges;
重启即可使用
参考文章: 【Mysql登录失败&修改密码&新增root用户&修改密码策略】Access denied for user ‘root‘@‘localhost‘ (using password: NO)_狍狍子的博客-CSDN博客
mysql在更改root远程连接时候报错:Duplicate entry ‘%-root‘ for key ‘PRIMARY‘_duplicate entry '%-root' for key 'primary_张国荣家的弟弟的博客-CSDN博客