亲测:
bash
#获取运行中镜像?通过 NAMES 获取镜像名称
docker ps
#mysql-container为容器名称
docker inspect mysql-container | grep -i MYSQL_ROOT_PASSWORD
查看Docker环境变量设置的密码
- 方法一:查看容器的运行参数
在Linux系统下,可以使用docker inspect
命令获取容器的详细信息,其中包括环境变量的设置。假设你的MySQL容器名称是mysql-container
,执行以下命令:
bash
docker inspect mysql-container
命令执行后会输出大量JSON格式的信息,你可以通过搜索关键词(如MYSQL_ROOT_PASSWORD
)来查找密码相关的设置。也可以结合grep
命令简化输出,比如:
bash
docker inspect mysql-container | grep -i MYSQL_ROOT_PASSWORD
-i
参数表示不区分大小写搜索,这样能快速定位到包含MYSQL_ROOT_PASSWORD
的行,查看设置的密码。
- 方法二:查看容器启动历史记录
如果你是在本地终端启动的Docker容器,那么可以使用history
命令查看历史执行过的命令。例如:
bash
history | grep docker run
找到启动MySQL容器的那行命令,查看是否通过-e
参数设置了MYSQL_ROOT_PASSWORD
等环境变量,进而获取到设置的密码 。不过这种方式只适用于你没有清理过命令历史记录的情况。
查看docker-entrypoint-initdb.d里SQL文件中的密码设置
- 进入容器查看相关目录
首先使用docker exec
命令进入MySQL容器,假设容器名称是mysql-container
,执行:
bash
docker exec -it mysql-container bash
进入容器后,导航到docker-entrypoint-initdb.d
目录,使用ls
命令列出该目录下的文件:
bash
ls /docker-entrypoint-initdb.d
然后使用文本编辑器(如vim
或cat
命令 )查看具体的SQL文件内容。比如,文件名为init-user-db.sql
,可以用以下方式查看:
bash
cat /docker-entrypoint-initdb.d/init-user-db.sql
或者使用vim
进行编辑查看:
bash
vim /docker-entrypoint-initdb.d/init-user-db.sql
在SQL文件中查找创建用户和设置密码的相关语句,常见的设置密码语句如:
sql
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
或者
sql
ALTER USER 'username'@'host' IDENTIFIED BY 'password';
找到这些语句就能获取到设置的密码信息。
在MySQL容器中,无法直接从配置文件里获取明文密码,因为从MySQL 5.7版本开始,密码以加密形式存储在系统库中 。不过,可以通过以下方式间接查看相关信息或重置密码:
查看MySQL用户表(加密密码存储处)
- 登录MySQL:在容器内的命令行,执行登录命令:
bash
mysql -uroot -p
如果设置了root密码,按提示输入密码回车登录 。要是不知道root密码,可尝试后续重置密码的方法。
- 查看用户表:登录成功后,执行以下SQL语句:
sql
USE mysql;
SELECT user, host, authentication_string FROM user;
authentication_string
字段存储的是加密后的密码,但无法直接还原为明文。
查找可能的配置文件(不一定有密码信息)
虽然通常无法从中获取明文密码,但还是可以检查下常见的配置文件,看看是否有相关线索:
- MySQL配置文件 :路径可能是
/etc/mysql/my.cnf
或/etc/mysql/mysql.conf.d/mysqld.cnf
,使用文本编辑器(如vim
)打开查看:
bash
vim /etc/mysql/my.cnf
这些文件主要用于配置MySQL的运行参数,比如端口、字符集、缓存等,不一定包含密码信息。
- 容器初始化脚本 :像
docker-entrypoint-initdb.d
目录下的脚本文件,可能会有创建用户、设置密码等相关操作,你可以使用ls
命令查看该目录下的文件:
bash
ls /docker-entrypoint-initdb.d
然后用文本编辑器打开查看内容(如 vim 文件名
),不过也可能经过加密处理或使用环境变量设置密码 。
重置密码
如果忘记密码,可按以下步骤重置:
- 停止MySQL服务 :
根据MySQL服务管理方式,执行相应停止命令:
- 若使用
service
管理:
bash
service mysql stop
- 若使用
systemctl
管理:
bash
systemctl stop mysql
- 以特殊模式启动MySQL :
在容器外,先停止MySQL容器:
bash
docker stop mysql-container
再重新启动容器并挂载配置文件目录,进入容器后编辑MySQL配置文件,在 [mysqld]
配置段添加 skip-grant-tables
以跳过权限验证。
- 登录并修改密码 :
再次进入容器,此时无需密码即可登录MySQL:
bash
mysql
登录后执行SQL语句重置密码(假设新密码为 new_root_password
):
sql
USE mysql;
UPDATE user SET authentication_string = PASSWORD('new_root_password') WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
- 恢复正常模式 :
删除配置文件中添加的skip-grant-tables
,重启MySQL容器:
bash
docker restart mysql-container
之后就能用新密码登录 。
1. 登录MySQL
在当前容器内的命令行中, 执行以下命令登录MySQL :
bash
mysql -uroot -p
如果MySQL的root用户设置了密码,系统会提示输入密码,输入正确密码后回车即可登录。
要是不知道root密码,先跳过此步骤,尝试后续重置密码的方法。
2. 查询账号信息(已登录MySQL的情况下)
成功登录MySQL后,执行以下SQL语句:
sql
USE mysql;
SELECT user, host FROM user;
上述SQL语句会列出当前MySQL实例中的所有用户账号,以及这些账号允许登录的主机。
3. 重置密码(忘记root密码时)
停止MySQL服务
在容器内,根据MySQL服务的管理方式,执行相应的停止命令:
- 若使用
service
管理:
bash
service mysql stop
- 若使用
systemctl
管理:
bash
systemctl stop mysql
以特殊模式启动MySQL
在容器外,先停止当前MySQL容器:
bash
docker stop xfyun-mysql-container
接着重新启动容器,并挂载MySQL的配置文件目录(具体挂载方式因镜像而异)。进入容器后,编辑MySQL的配置文件(常见路径有 /etc/mysql/my.cnf
或 /etc/mysql/mysql.conf.d/mysqld.cnf
) ,在 [mysqld]
配置段下添加 skip-grant-tables
,用于跳过权限验证。
登录MySQL并修改密码
再次进入容器,此时无需密码即可登录MySQL:
bash
mysql
登录后,执行以下SQL语句重置root密码(假设新密码为 new_root_password
):
sql
USE mysql;
UPDATE user SET authentication_string = PASSWORD('new_root_password') WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
恢复正常模式
修改完密码后,删除配置文件中添加的 skip-grant-tables
,然后重启MySQL容器:
bash
docker restart xfyun-mysql-container
之后就可以使用新设置的密码登录MySQL 。
4. 查看或修改其他用户密码(已登录MySQL且有足够权限)
如果想查看其他用户的信息,可通过之前的 SELECT user, host FROM user;
语句 。
若要修改其他用户的密码,比如将 testuser
用户的密码修改为 newpassword
,执行以下SQL语句:
sql
ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;
将 testuser
和 localhost
根据实际情况替换 。