白日依山尽,黄河入海流。欲穷千里目,更上一层楼。 -- 唐·王之涣

tidb忘记root密码

背景介绍

目前本地的Tidb集群是通过 tiup 命令进行部署的。

具体用法参考 使用 TiUP 部署 TiDB 集群

大致的步骤有

  • 安装 tiup
  • 利用 tiup 安装 cluster 组件
  • 生产集群 模板 tiup cluster template > topology-xxx.yaml
  • 修改模板,配置我们需要的组件。比如 tidb-server/tidb-pd/tidb-tikv/tidb-cdc 等等
  • tiup 检查集群模板有效性 tiup cluster check ./topology-xxx.yaml
  • 集群部署
1
tiup cluster deploy tidb-cluster-name v6.1.0 ./topology-xxx.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]
  • 查看安装的集群列表
1
tiup list
  • 查看 具体的集群情况
1
tiup cluster display tidb-cluster-name
  • 启动集群
1
tiup cluster start tidb-cluster-name [--init]
  • 最终再查看集群状态
1
tiup cluster display tidb-cluster-name

扩展

利用tiup安装集群之后,tiup 是可以管理(stop/start等)集群的。但是这个管理 是针对整个集群而言的。不能只是管理集群中的某个组件,比如 tidb-pd

在每个组件主机节点上。tiup 会自动配置 systemctl 管理的相关 service,比如 tidb-server 节点,会自动配置 tidb-4000.service

这样如果我们只是相对 tidb-server做一些变更,然后启动、停止的时候就可以直接使用 systemctl stop/start tidb-4000.service

忘记root密码操作

核心其实和MySQL一样,都是需要通过配置 skip-grant-table = true 来跳过密码认证来登录,成功之后修改密码,进行权限刷新。在回滚和重启即可。

步骤

1、登录 tidb-server 节点,修改 tidb-deploy/conf/tidb.toml 添加如下配置

1
2
[security]
skip-grant-table = true

2、使用 systemctl 停止 tidb-4000.service

1
2
3
4
# 因为修改了配置,所以需要先reload
systemctl daemon-reload
# 先停止,注意不是直接重启哦 (这里直接重启会失败)
systemctl stop tidb-4000.service

3、需要手动使用 run_tidb.shroot 用户 临时启动

这里也是和MySQL不一定的地方所在, tiup安装集群之后,各个组件都是使用tidb 这个用户启动的。

root启动tidb-server

1
bash tidb-deploy/scripts/run_tidb.sh

4、登录tidb-server进行密码修改并刷新权限

1
2
3
4
5
6
7
8
9
# 登录
# mysql -h xxxx -u root -P 4000 -p

# 修改密码
use mysql;
set password root@'%' = password('new-password-here');

# 刷新权限
flush privileges;

5、修改 tidb-deploy/conf/tidb.toml 进行配置回滚

6、停止 run_tidb.sh 脚本

7、使用 systemctl 启动 tidb-4000.service

1
2
3
4
# 因为修改了配置,所以需要先reload
systemctl daemon-reload
# 启动服务
systemctl start tidb-4000.service

8、最终登录验证

这个时候需要密码,使用新配置密码即可登录

作者

Colin

发布于

2022-07-28

许可协议