托 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
本文只做备份之用。

  1. 修改 my.cnf
    新增一行 skip-grant-tables
  2. 重启容器
    如果是用 docker compose 起的,直接 docker compose down; docker compose up -d
    或者可以直接用容器名 docker restart mysql
  3. 免登录进入 MySQL
    docker exec -it <容器ID> mysql -uroot
  4. 修改密码
use mysql;
flush privileges;
alter user 'root'@'localhost' identified by '密码';
flush privileges;
  1. 还原 my.cnf
    删除刚刚添加的那行。
  2. 重复步骤2

可以看到,已经轻松秒杀(老厮音)。