docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker mysql账号密码

docker获取mysql账号密码的方法

作者:爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ

本文介绍Docker中获取MySQL密码的多种方法,包括检查容器参数、启动历史、初始化脚本及用户表,同时提供密码重置流程以应对忘记密码的情况,感兴趣的朋友快来跟随小编一起学习吧

亲测:

#获取运行中镜像?通过 NAMES 获取镜像名称
docker ps
#mysql-container为容器名称
docker inspect mysql-container | grep -i MYSQL_ROOT_PASSWORD

查看Docker环境变量设置的密码

docker inspect mysql-container

命令执行后会输出大量JSON格式的信息,你可以通过搜索关键词(如MYSQL_ROOT_PASSWORD )来查找密码相关的设置。也可以结合grep命令简化输出,比如:

docker inspect mysql-container | grep -i MYSQL_ROOT_PASSWORD

-i参数表示不区分大小写搜索,这样能快速定位到包含MYSQL_ROOT_PASSWORD的行,查看设置的密码。

history | grep docker run

找到启动MySQL容器的那行命令,查看是否通过-e参数设置了MYSQL_ROOT_PASSWORD等环境变量,进而获取到设置的密码 。不过这种方式只适用于你没有清理过命令历史记录的情况。

查看docker-entrypoint-initdb.d里SQL文件中的密码设置

docker exec -it mysql-container bash

进入容器后,导航到docker-entrypoint-initdb.d目录,使用ls命令列出该目录下的文件:

ls /docker-entrypoint-initdb.d

然后使用文本编辑器(如vimcat命令 )查看具体的SQL文件内容。比如,文件名为init-user-db.sql ,可以用以下方式查看:

cat /docker-entrypoint-initdb.d/init-user-db.sql

或者使用vim进行编辑查看:

vim /docker-entrypoint-initdb.d/init-user-db.sql

在SQL文件中查找创建用户和设置密码的相关语句,常见的设置密码语句如:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

或者

ALTER USER 'username'@'host' IDENTIFIED BY 'password';

找到这些语句就能获取到设置的密码信息。

在MySQL容器中,无法直接从配置文件里获取明文密码,因为从MySQL 5.7版本开始,密码以加密形式存储在系统库中 。不过,可以通过以下方式间接查看相关信息或重置密码:

查看MySQL用户表(加密密码存储处)

  1. 登录MySQL:在容器内的命令行,执行登录命令:
mysql -uroot -p

如果设置了root密码,按提示输入密码回车登录 。要是不知道root密码,可尝试后续重置密码的方法。
2. 查看用户表:登录成功后,执行以下SQL语句:

USE mysql;
SELECT user, host, authentication_string FROM user;

authentication_string 字段存储的是加密后的密码,但无法直接还原为明文。

查找可能的配置文件(不一定有密码信息)

虽然通常无法从中获取明文密码,但还是可以检查下常见的配置文件,看看是否有相关线索:

vim /etc/mysql/my.cnf

这些文件主要用于配置MySQL的运行参数,比如端口、字符集、缓存等,不一定包含密码信息。

ls /docker-entrypoint-initdb.d

然后用文本编辑器打开查看内容(如 vim 文件名 ),不过也可能经过加密处理或使用环境变量设置密码 。

重置密码

如果忘记密码,可按以下步骤重置:

  1. 停止MySQL服务
    根据MySQL服务管理方式,执行相应停止命令:
service mysql stop
systemctl stop mysql
  1. 以特殊模式启动MySQL
    在容器外,先停止MySQL容器:
docker stop mysql-container

再重新启动容器并挂载配置文件目录,进入容器后编辑MySQL配置文件,在 [mysqld] 配置段添加 skip-grant-tables 以跳过权限验证。
3. 登录并修改密码
再次进入容器,此时无需密码即可登录MySQL:

mysql

登录后执行SQL语句重置密码(假设新密码为 new_root_password ):

USE mysql;
UPDATE user SET authentication_string = PASSWORD('new_root_password') WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
  1. 恢复正常模式
    删除配置文件中添加的 skip-grant-tables ,重启MySQL容器:
docker restart mysql-container

之后就能用新密码登录 。

1. 登录MySQL

在当前容器内的命令行中, 执行以下命令登录MySQL :

mysql -uroot -p

如果MySQL的root用户设置了密码,系统会提示输入密码,输入正确密码后回车即可登录。
要是不知道root密码,先跳过此步骤,尝试后续重置密码的方法。

2. 查询账号信息(已登录MySQL的情况下)

成功登录MySQL后,执行以下SQL语句:

USE mysql;
SELECT user, host FROM user;

上述SQL语句会列出当前MySQL实例中的所有用户账号,以及这些账号允许登录的主机。

3. 重置密码(忘记root密码时)

停止MySQL服务

在容器内,根据MySQL服务的管理方式,执行相应的停止命令:

service mysql stop
systemctl stop mysql

以特殊模式启动MySQL

在容器外,先停止当前MySQL容器:

docker stop xfyun-mysql-container

接着重新启动容器,并挂载MySQL的配置文件目录(具体挂载方式因镜像而异)。进入容器后,编辑MySQL的配置文件(常见路径有 /etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf ) ,在 [mysqld] 配置段下添加 skip-grant-tables ,用于跳过权限验证。

登录MySQL并修改密码

再次进入容器,此时无需密码即可登录MySQL:

mysql

登录后,执行以下SQL语句重置root密码(假设新密码为 new_root_password ):

USE mysql;
UPDATE user SET authentication_string = PASSWORD('new_root_password') WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;

恢复正常模式

修改完密码后,删除配置文件中添加的 skip-grant-tables ,然后重启MySQL容器:

docker restart xfyun-mysql-container

之后就可以使用新设置的密码登录MySQL 。

4. 查看或修改其他用户密码(已登录MySQL且有足够权限)

如果想查看其他用户的信息,可通过之前的 SELECT user, host FROM user; 语句 。
若要修改其他用户的密码,比如将 testuser 用户的密码修改为 newpassword ,执行以下SQL语句:

ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;

testuserlocalhost 根据实际情况替换 。

到此这篇关于docker如何获取mysql的账号密码的文章就介绍到这了,更多相关docker mysql账号密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文