起因
最近使用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.youkuaiyun.com/code_mzh/article/details/108243683
https://blog.youkuaiyun.com/ayychiguoguo/article/details/120370686
https://blog.youkuaiyun.com/u012069313/article/details/123051399
Docker部署RocketMQ时MySQL权限修复教程
本文讲述了作者在阿里云服务器上部署RocketMQ时遇到MySQL权限问题,通过跳过密码验证、添加和修改root用户权限、调整密码策略等步骤,解决了MySQL登录问题,提供了解决方案和相关参考链接。





