现在,问题出在容器内无法登录 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
密码设置正确,问题可能是由于已有数据目录中的权限或密码设置不一致。 - 你可以通过清空数据目录或跳过权限表重置密码来解决问题。
暂无评论内容