docker中运行MySQL总是报错密码错误

W[(5L[]4@E%W4IQ48UO@L{5

 

现在,问题出在容器内无法登录 root 用户。这可能是由于以下原因:

1. 数据库数据目录(/var/lib/mysql)中的现有数据

如果你之前在容器中已经启动过 MySQL,并且该容器的数据目录(即 /var/lib/mysql)已经有数据,那么 MySQL 可能会自动为 root 用户设置某些权限或密码,而这些设置可能与启动时传递的密码不一致。

 

解决办法:你可以尝试清空数据目录或重新初始化容器的数据目录。

停止并删除现有容器:

docker stop mysql
docker rm mysql

清除容器挂载的持久化数据目录(如果使用了挂载,确保数据目录为空):

sudo rm -rf /home/ljaer/mysql/*

重新运行容器:

docker run --name mysql --restart=always -v /home/ljaer/mysql:/var/lib/mysql -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.30

 

2. MySQL 配置或权限问题

可能容器内的 root 用户在某些配置下无法从 localhost 登录,尤其是在容器内未设置正确的权限或配置时。

解决办法:尝试跳过权限表进行登录和修改用户权限,步骤如下:

进入 MySQL 容器

docker exec -it mysql bash

跳过权限表启动 MySQL

mysqld --skip-grant-tables --skip-networking &

然后等待 MySQL 启动完成。

登录 MySQL

由于 --skip-grant-tables 选项,MySQL 不会验证密码,你应该能成功登录:

mysql -u root

更新密码

登录后,执行以下 SQL 命令来重置 root 密码:

USE mysql;
UPDATE user SET authentication_string=PASSWORD('root') WHERE User='root';
FLUSH PRIVILEGES;

退出并重启容器

退出 MySQL 后停止 MySQL 服务,并重启容器:

exit
docker restart gmalldocker_mysql

此时,你应该能够使用新密码 Yao19990324 登录 MySQL 容器。

3. 确保没有其他防火墙或端口映射问题

如果你是通过外部客户端连接到 MySQL 容器,确保防火墙允许访问 3310 端口,并且 Docker 正确映射了端口。

在 VPS 上,你可以检查防火墙设置:

sudo ufw allow 3310

确保 Docker 容器对外暴露的端口是 3310,而不是 3306。

 

总结:

  • 容器内的 root 密码设置正确,问题可能是由于已有数据目录中的权限或密码设置不一致。
  • 你可以通过清空数据目录或跳过权限表重置密码来解决问题。
© 版权声明
THE END
喜欢就支持一下吧
点赞34 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容