mysql新部署登录问题Access denied for user ‘root‘ (using password: YES)
而且发现,直接在服务器上进入docker容器(docker exec -it containerId /bin/bash),登录mysql(mysql -u root -p),同样会报错:Access denied for user 'root' (using password: YES)直接登录会报错:Access denied for user 'root'@'xx.xx.xx.xx' (us
在服务器上部署mysql,本地客户端登录报错。
docker部署命令:
docker run \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /home/data/mysql/conf:/etc/mysql/conf.d \
-v /home/data/mysql/data:/var/lib/mysql:rw \
-v /home/data/mysql/my.cnf:/etc/mysql/my.cnf \
--name my_mysql \
--restart=always \
-d mysql:8.0
直接登录会报错:Access denied for user 'root'@'xx.xx.xx.xx' (using password: YES)
而且发现,直接在服务器上进入docker容器(docker exec -it containerId /bin/bash),登录mysql(mysql -u root -p),同样会报错:Access denied for user 'root' (using password: YES)
解决方式(本地试过可以这么解决,可能有更好的方式):
1、临时跳过权限验证(如果无法登录):
- 停止容器:
docker stop mysql_containerId - 暂时修改你挂载的
/data/mysql/my.cnf文件,在[mysqld]部分添加:
[mysqld]
skip-grant-tables
-
启动容器:
docker start mysql_containerId -
再次进入容器:
docker exec -it mysql_containerId /bin/bash -
现在无需密码即可登录MySQL:
mysql -u root
2、修改root用户的认证插件和密码:
在MySQL提示符下执行以下命令(注意替换 '123456' 为你的实际密码):
-- 刷新权限
FLUSH PRIVILEGES;
-- 修改认证插件和密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
-- 同样修改'root'@'%'(如果有)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
-- 再次刷新权限
FLUSH PRIVILEGES;
进入容器,查询mysql.user。
SELECT user, host FROM mysql.user;
发现root有2条数据,删掉host=localhost那一条。
delete from mysql.user where user='root' and host='localhost';

注意:MySQL 8.0+ 中,localhost 和 %(允许所有主机远程连接)被视为不同的用户。
3、恢复权限验证:
-
退出MySQL和容器。
-
从
/data/mysql/my.cnf文件中移除skip-grant-tables行。 -
重启容器:
docker restart mysql_containerId
4、尝试重新登录:
docker exec -it mysql_containerId /bin/bash
mysql -u root -p
输入密码 123456,看是否成功。
之后在本地使用客户端工具,发现可以正常登录。
更多推荐

所有评论(0)