重置 Docker 容器中 MySQL8 实例的帐户密码
托 OpenSSH 漏洞的福,给手上的所有服务器都 update 了一下。结果其中一台上的数据库炸了(跑在 Docker 上 upgrade 的时候顺带更新了 Docker 重启了)。一开始以为是 v27.0.1 的 Bridge 改了些啥导致不通了,结果进容器里 Ping 是通的,而且就算进了 MySQL 容器里也报 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
。那可能是重启导致 MySQL 的认证模块炸了,重置密码解决。
重置密码参考:https://www.xxyopen.com/2022/08/21/mysql/reset_pass.html
本文只做备份之用。
- 修改
my.cnf
新增一行skip-grant-tables
- 重启容器
如果是用 docker compose 起的,直接docker compose down; docker compose up -d
。
或者可以直接用容器名docker restart mysql
- 免登录进入 MySQL
docker exec -it <容器ID> mysql -uroot
- 修改密码
use mysql;
flush privileges;
alter user 'root'@'localhost' identified by '密码';
flush privileges;
- 还原
my.cnf
删除刚刚添加的那行。 - 重复步骤2
可以看到,已经轻松秒杀(老厮音)。
看看其他吧