起因
最近使用docker在阿里云服务器上安装rocketmq,遇到各种各样的问题,重启过很多次服务器,装好后登录mysql发现挂了,重启mysql服务后输入mysql -u root -p
命令报错:
ERROR:Access denied for user root
@localhost
(using password:YES)
解决思路
首先百度搜索报错原因说是登录密码错误,于是使用修改配置文件跳过密码验证登录成功后,发现还是无法修改密码,一通排查发现是数据库user表没有root这个用户了,于是添加root用户,重新修改密码终于登陆成功。于是记录一下修改密码的命令,省的每次都要重新查了。
解决办法
- 修改配置文件,跳过登陆验证,linux环境配置文件路径如下,文件中添加
skip-grant-tables
vim /etc/my.cnf
# 在[mysqld]下添加一行
skip-grant-tables
- 重启并登录mysql服务,密码随便输
service mysqld restart
mysql -u root -p
# 登录后刷新权限,我也不知道具体作用
flush privileges;
- 首先查看root用户是否存在
use mysql;
select user,host from user;
# 查询结果类似这样
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| admin | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| zhangj | localhost |
+------------------+-----------+
- 如果发现不存在root,可以参考这篇文章新建root用户并赋予权限
# 创建用户,这一步可能会报错,因为密码太简单,可以参考第5步修改密码限制或者先改成复杂密码
create user 'root'@'localhost' identified by '123456';
# 赋予所有库所有表操作权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
flush privileges;
# 新增完用户后可以将访问权限设置为%,这样就可以远程登录mysql了
use mysql
update user set host='%' where user='root';
- 存在root用户,直接修改密码即可。因为我想设简单密码,而mysql8.0默认长度是8,所以要修改一下密码限制
# 查看密码限制
SHOW VARIABLES LIKE 'validate_password%';
# 修改密码策略
set global validate_password.policy=0;
set global validate_password.length=3;
set global validate_password.mixed_case_count=0;
set global validate_password.special_char_count=0;
# 修改密码,需要注意的是'%'要与第3步查到的root对应的host一致,也有可能是'localhost'
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
参考文章
https://blog.csdn.net/code_mzh/article/details/108243683
https://blog.csdn.net/ayychiguoguo/article/details/120370686
https://blog.csdn.net/u012069313/article/details/123051399