Docker - Docker启动的MySql修改密码

目录

前置操作

使用以下命令创建了一个MySQL容器,并设置了MySQL的root密码为123456

docker run -p 3306:3306 --name mysql -v /docker/mysql/conf:/etc/mysql/conf.d -v /docker/mysql/logs:/logs -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

错误的操作

因为自己实践了错误操作,所以就把错误的操作记录一下,防止再走弯路

  1. 登录mysql
    docker exec -it mysql-container mysql -u root -p
    
  2. 修改用户对应的密码
    ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
    
  3. 修改完密码后,退出MySQL命令行并断开连接
    exit
    
  4. 重新连接到MySQL容器以验证新密码是否有效
    docker exec -it mysql mysql -u root -p
    

     本来以为这样操作后,密码就成功修改了,但是发现输入新密码不起作用,还是需要输入老密码才能正确登录,还是没有修改成功!于是在考虑会不会是mysql的docker服务没有删除的原因导致,于是有了下述操作

  5. 停止正在运行的MySQL容器
    docker stop <container_name_or_id>
    
  6. 删除已停止的MySQL容器
    docker rm <container_name_or_id>
    
  7. 创建一个新的MySQL容器,并设置一个新的root密码。如下所示:
    docker run -p 3306:3306 --name mysql -v /docker/mysql/conf:/etc/mysql/conf.d -v /docker/mysql/logs:/logs -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=dewfwe -d mysql:5.7
    

    结果执行登录mysql的命令时,还是需要原来的密码才可以登录,看来还是操作有误

 上述错误操作不生效原因

         询问GPT的回答:Docker容器的数据卷(volumes)通常用于持久化存储容器内的数据,包括配置文件和数据库文件等。在上述的情况中,执行的操作是修改MySQL了的root密码,但密码没有被正确更新,这说明有极大的可能是与Docker容器的数据卷有关,即可能是数据库密码被持久化存储了

 确实应该是gpt阐述的原因

docker run -p 3306:3306 --name mysql -v /docker/mysql/conf:/etc/mysql/conf.d -v /docker/mysql/logs:/logs -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

看上面执行的命令操作,我将容器内的配置文件、日志和数据挂载到主机的目录。这就意味着MySQL的数据和配置都存储在这些挂载的主机目录中,而不是容器内部。

即使我执行了停止并删除容器的操作,但是对于docker来说,这些挂载的目录并没有被删除,因此MySQL的数据和配置文件仍然存在于主机上。我再怎么去修改密码,也是徒劳无功的。

所以缺少的一步操作是:需要删除之前挂载的数据目录

正确操作

前置操作是一致的

  • 停止并删除之前的MySQL容器
    • 使用docker stop mysqldocker rm mysql来停止和删除容器
  • 删除之前挂载的数据目录
    • 使用sudo rm -rf /docker/mysql/data来删除之前的数据目录。
  • 使用新的密码创建一个新的MySQL容器:
    docker run --name gmalldocker\_mysql --restart=always -v /home/ljaer/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql:8.0.26
  • 按照上述操作后,再去重新连接到MySQL容器用新密码登录,即可成功登录

    docker exec -it gmalldocker\_mysql /bin/bash
    mysql -u root -p
  • 出现如下图,就说明使用新密码登录成功了

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Docker Compose可以轻松地启动和停止多个容器,并且可以通过一个简单的配置文件来定义容器之间的关系和依赖关系。在引用中提到的docker-compose启动mysql,是指使用Docker Compose来启动一个MySQL数据库容器。通过配置docker-compose.yml文件,可以指定MySQL容器的镜像、端口、数据卷等信息。启动后,可以使用docker-compose ps命令查看容器状态,使用docker-compose stop命令停止容器,使用docker-compose restart命令重启容器,使用docker-compose down命令关闭容器并删除相关资源。除了使用Docker Compose,还可以使用其他方式来启动MySQL容器,如使用Helm启动MySQL高可用集群、使用Docker Compose启动单节点MySQL等。同时,Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Docker Compose可以轻松地启动和停止多个容器,并且可以通过一个简单的配置文件来定义容器之间的关系和依赖关系。在引用中提到的docker-compose启动mysql,是指使用Docker Compose来启动一个MySQL数据库容器。通过配置docker-compose.yml文件,可以指定MySQL容器的镜像、端口、数据卷等信息。启动后,可以使用docker-compose ps命令查看容器状态,使用docker-compose stop命令停止容器,使用docker-compose restart命令重启容器,使用docker-compose down命令关闭容器并删除相关资源。除了使用Docker Compose,还可以使用其他方式来启动MySQL容器,如使用Helm启动MySQL高可用集群、使用Docker Compose启动单节点MySQL等。同时,还可以使用web管理工具如phpMyAdmin来管理MySQL数据库。在测试和开发环境中,使用Docker Compose启动MySQL容器可以方便地进行开发和测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值