[FAQ]TiDB忘记 root 密码,停机如何重置root密码

以下为在v4.0.0环境下重置密码的操作,需要停机重置。不停机重置root密码参考 [FAQ] TiDB 忘记 root 密码,重置 root 密码

1、通过tiup cluster edit-cluster [集群名称]进行配置修改,在server_configs中添加配置

server_configs:
    tidb:
        security.skip-grant-table: true

2、通过tiup cluster stop [集群名称] 停止集群,通过tiup cluster start [集群名称] 启动集群

PS:应该使用reload也可以,当时是停止后重新启动的

3、此时密码就是空了,可以正常设置密码了

4、还原配置,将配置中添加的skip-grant-table去掉!!!并reload配置

8 个赞

ok,:smile:

1 个赞

提供一种新的思路,不需要重启服务,一条语句解决。
前提是正常生产环境中,每个DBA都有自己的高权限账号,而非使用root账户。
这样的话就可以使用高权限的账号来重置root密码。
说一下我的操作方式吧,因为tidb和mysql一样,默认都是mysql_native_password加密方式
直接使用下面的sql改成自己的加密后的密码
alter user root@% identified with mysql_native_password as ‘加密后’;
亲测OK

9 个赞

谢谢楼上的兄弟

客气了兄弟 哈哈哈

可以先设置跳过,无秘密登录,在设置

感觉好复杂

高权限用户设置的目的是让它能更新root用户密码?还是因为知晓此用户密码,来以它为准覆盖root用户密码?

估计是为了安全,禁用了root用户,然后另外创建一个高权限用户,避免被攻击。
我理解的对么?@Jiawei

我照你的方法做失败了,版本v5.3.1 ,
tiup cluster edit-config mytidb
server_configs:
tidb:
log.slow-threshold: 300
security.skip-grant-table: true

tiup cluster reload mytidb, 报错如下:
Error: init config failed: 192.168.3.140:4000: executor.ssh.execute_failed: Failed to execute command over SSH for ‘tidb@192.168.3.140:22’ {ssh_stderr: load config file: /tidb-deploy/tidb-4000/conf/tidb.toml
invalid config TiDB run with skip-grant-table need root privilege
, ssh_stdout: , ssh_command: export LANG=C; PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin /tidb-deploy/tidb-4000/bin/tidb-server --config-check --config=/tidb-deploy/tidb-4000/conf/tidb.toml }, cause: Process exited with status 1: check config failed

求解?

我这里是v6.0的版本,也碰到和你一样的问题,后来找到了解决方案。在出错提示后,进入tidb部署目录/tidb-deploy/tidb-4000/bin,然后运行tidb-server,这样就可以免密连接数据库了。你尝试一下,希望对你有帮助。

1 个赞

一般除了root不会在设置一个最高权限的用户了。
没有最高权限的非root用户,那么就执行修改配置跳过密码,然后重启以后设置,在修改配置的方式了。

不是哦,生产环境一方面是为了安全,另外一方面是为了审计。

补充一下,这个是因为新版本TiDB的加了校验,必须用Linux的root用户执行./scripts/run_tidb.sh才行,所以完整的操作步骤为:

  1. tiup cluster stop ${CLUSTER_NAME} -R tidb
  2. 使用root用户登陆tidb-server机器
  3. cd到tidb-server的deploy目录
  4. 修改conf/tidb.toml增加
    [security]
    skip-grant-table = true
    
  5. 执行bash scripts/run_tidb.sh &
  6. 登陆TiDB修改root密码mysql -h 127.0.0.1 -P 4000 -u root -e "alter user root identified by '*******' "
  7. tiup cluster reload ${CLUSTER_NAME} -R tidb (因为我们没有修改tiup中的元数据,所以reload重启tidb-server时候,会覆盖掉我们手动在配置中新增的skip-grant-table参数)
3 个赞

赞一个~