• Docker - Docker启动的MySql修改密码


    基于上篇文章《Docker - Docker安装MySql并启动》,在Docker中启动了mysql服务,但是密码设置成了123456,想起来学生时代数据库被盗走,然后邮箱收到被勒索BTC的场景还历历在目😭,密码不能再设置这么简单了啊!

    在这里插入图片描述

    前置操作

    使用以下命令创建了一个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

    错误的操作

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

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

    本来以为这样操作后,密码就成功修改了,但是发现输入新密码不起作用,还是需要输入老密码才能正确登录,还是没有修改成功!
    在这里插入图片描述

    于是在考虑会不会是mysql的docker服务没有删除的原因导致,于是有了下述操作

    1. 停止正在运行的MySQL容器
    docker stop <container_name_or_id>
    
    • 1
    1. 删除已停止的MySQL容器
    docker rm <container_name_or_id>
    
    • 1
    1. 创建一个新的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
    
    • 1

    结果执行登录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
    
    • 1

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

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

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


    正确操作

    前置操作是一致的

    • 停止并删除之前的MySQL容器
      • 使用docker stop mysqldocker rm mysql来停止和删除容器
    • 删除之前挂载的数据目录
      • 使用sudo rm -rf /docker/mysql/data来删除之前的数据目录。
    • 使用新的密码创建一个新的MySQL容器:
    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=cwfwef -d mysql:5.7
    
    • 1

    按照上述操作后,再去重新连接到MySQL容器用新密码登录,即可成功登录

    docker exec -it mysql mysql -u root -p
    
    • 1

    出现如下图,就说明使用新密码登录成功了
    在这里插入图片描述

    妈妈再也不用担心我被勒索BTC了😝!

  • 相关阅读:
    【无标题】
    【Python 零基础入门】Pandas
    【数值分析】复习知识点整合
    算法随想录算法训练营第四十四天|1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划
    【python】使用python操作XML文件及JSON与XML互转
    健康打卡每日提醒累了?那就让自动化帮你---HiFlow,应用连接自动化助手
    Axure导入使用ElementUI组件库
    C++项目实战--线程池代码讲解
    基于可变形卷积和注意力机制的带钢表面缺陷快速检测网络DCAM-Net(论文阅读笔记)
    线性代数学习笔记4-3:求解齐次线性方程组Ax=0、消元法、行最简阶梯型矩阵RRFE
  • 原文地址:https://blog.csdn.net/m0_37482190/article/details/133250569