暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TiDB数据库root用户密码忘记处理

277

1问题描述

TiDB 将用户账户存储在 mysql.user 系统表里面。每个账户由用户名和 host 作为标识。每个账户可以设置一个密码。每个用户名最长为 32 个字符。今天遇到一套TiDB数据库的root用户密码不对,导致tidb-server无法登录。针对此类问题可以通过以下步骤进行处理。

2处理过程

1、修改 TiDB 配置文件
1)登录其中一台 tidb-server 实例所在的机器。
2)进入 TiDB 节点的部署目录下的 conf 目录,找到 tidb.toml 配置文件。
3)在配置文件的 security 部分添加配置项 skip-grant-table。如无 security 部分,则将以下两行内容添加至 tidb.toml 配置文件尾部:
    [security]
    skip-grant-table = true
    2、终止该 tidb-server 的进程:
    1)查看 tidb-server 的进程:
      ps aux | grep tidb-serve
      2)找到 tidb-server 对应的进程 ID (PID) 并使用
       kill 命令停掉该进程:kill -9
      3、使用修改之后的配置启动 TiDB
      1)进入 TiDB 节点部署目录下的scripts 目录。
      2)切换到操作系统 root 账号。
      3)在前台执行目录中的 run_tidb.sh 脚本。
      4)在新的终端窗口中使用 root 登录后修改密码:
        mysql -h 127.0.0.1 -P 4000 -u root
        mysql> use mysql;
        mysql> select host,user from user;
        +------+------+
        | host | user |
        +------+------+
        | % | root |
        +------+------+
        1 row in set (0.00 sec)
        mysql> alter user 'root'@'%' identified by 'tidb';
        Query OK, 0 rows affected (0.15 sec)
        4、停止运行 run_tidb.sh 脚本,并去掉第 1 步中在 TiDB 配置文件中添加的内容,等待 tidb-server 自启动。

        3理论知识拓展

        1、添加用户

        设置登录密码后,auth_string 会被 TiDB 经过加密存储在 mysql.user 表中。

          CREATE USER [IF NOT EXISTS] user [IDENTIFIED BY 'auth_string'];
          CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_pass';
          GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';


          使用 SHOW GRANTS 可以看到为一个用户授予的权限:
          SHOW GRANTS FOR 'admin'@'localhost';
          +----------------------------------------------------+
          | Grants for admin@localhost |
          +----------------------------------------------------+
          | GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' |
          +----------------------------------------------------+
          1 row in set (0.00 sec)
          TiDB 的用户账户名由一个用户名和一个主机名组成。账户名的语法为 'user_name'@'host_name'。
          1)user_name 大小写敏感。
          2)host_name 可以是一个主机名或 IP 地址。主机名或 IP 地址中允许使用通配符 % 和 _。例如,名为 '%' 的主机名可以匹配所有主机,'192.168.1.%' 可以匹配子网中的所有主机。
          2、删除用户
          使用 DROP USER 语句可以删除用户,例如:
            DROP USER 'admin'@'localhost';
            这个操作会清除用户在 mysql.user 表里面的记录项,并且清除在授权表里面的相关记录。
            3、FLUSH PRIVILEGES
            用户以及权限相关的信息都存储在 TiKV 服务器中,TiDB 在进程内部会缓存这些信息。一般通过 CREATE USER,GRANT 等语句来修改相关信息时,可在整个集群迅速生效。如果遇到网络或者其它因素影响,由于 TiDB 会周期性地更新缓存信息,正常情况下,最多 15 分钟左右生效。
            如果授权表已被直接修改,则不会通知 TiDB 节点更新缓存,运行如下命令可使改动立即生效:
              FLUSH PRIVILEGES;

              文章转载自数据库运维之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论