繁体   English   中英

在 Docker 容器中更改 mysql 密码

[英]Change mysql password in Docker container

我如何更改 docker 容器中的 root 密码,因为一旦我停止 mysql 服务,容器就会自动停止。

我应该停止 mysql 容器并部署一个新容器吗?

您可以使用docker exec session从正在运行的容器更改它,如“ 从容器内连接到 MySQL 服务器”中所述

服务器准备就绪后,您可以在刚刚启动的 MySQL 服务器容器中运行 mysql 客户端并将其连接到 MySQL 服务器。
使用docker exec -it命令在您启动的 Docker 容器内启动一个mysql客户端,如下所示:

 docker exec -it mysql1 mysql -uroot -p

询问时,输入生成的 root 密码(请参阅上面有关如何找到它的说明)。 因为默认情况下MYSQL_ONETIME_PASSWORD选项为 true,所以在您使用上面的示例命令启动服务器容器并将 mysql 客户端连接到服务器后,您必须通过为 MySQL 5.7 及更高版本发出以下语句来重置服务器 root 密码:

 mysql> update user set authentication_string=password('new_password') where user='root';

或者运行,

 mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');

对于 MySQL 5.7 及更早版本,运行,

 mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

用您选择的密码替换newpassword 一旦密码被重置,服务器就可以使用了。

请注意,上述命令只会更改从 'localhost' 主机连接的 'root' 的密码。 您可以使用以下命令验证这一点:

 select * from mysql.user;

要从所有主机更改“root”的密码,请使用:

 ALTER USER 'root'@'%' IDENTIFIED BY 'newpassword';

然后,如“ hub.docker.com/mysql ”中所述,不要忘记hub.docker.com/mysql secrets

作为通过环境变量传递敏感信息的替代方法,可以将_FILE附加到先前列出的环境变量,从而使初始化脚本从容器中存在的文件中加载这些变量的值。
特别是,这可用于从存储在/run/secrets/<secret_name>文件中的 Docker 机密加载密码。
例如:

 $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag

如果您忘记了旧密码,您可以按照以下几个步骤重置密码。 我写了一个关于如何做到这一点的教程(你可以通过鼓掌表示支持): https : //medium.com/@marinbinzari/reset-root-mysql-password-in-docker-d961c71285e4

TLDR :使用查询创建一个mysql-init.sql文件以重置密码:

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

将文件挂载到/tmp文件夹中,运行容器(不执行,因此 MySQLD 未启动),然后使用 init 脚本启动 mysqld。

mysqld_safe --init-file=/tmp/mysql-init.sql &

尝试连接,退出docker容器并开始使用新密码🤯

哦,再也不会忘记你的密码了😅

首先使用 docker container bash

docker exec -it containerId bash

然后

  • 设置新的mysql密码

    mysqladmin -u root -p'oldpassword' password 'newpassword'

  • 设置密码为空使用

    mysqladmin -u root -p'oldpassword' password ''

确保-poldpassword之间没有空格

您还可以在运行容器时使用 -e 选项设置密码,该选项设置环境变量MYSQL_ROOT_PASSWORD

docker run -d \
  --name=mysql5.7 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 mysql/mysql-server:latest

不幸的是,要在 MYQL 8.0 中重置 root 密码,Martin Binzari 即将推出的 Tipp 不再完全有效。 但是您可以执行以下操作:(根据他的手册和如何在 MySQL 8.0.11 中重置 root 密码?

  1. 创建一个mysql-init.sql
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
  1. 将其挂载到 /tmp 文件夹。
  2. 使用docker-compose stop mysql停止容器
  3. 运行docker-compose run mysql bash
  4. 里面运行命令mysqld_safe --init-file=/tmp/mysql-init.sql &
  5. 等待 10 秒,按回车并运行mysql -uroot
  6. 然后你可以运行命令ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
  7. 最后,您可以使用新的 root 密码退出并登录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM