TiDB 应急运维脚本,更加方便的管理TiDB集群

TiDB 应急运维脚本,更加方便的管理TiDB集群

使用方法

markdown 复制代码
使用方法:

[tidb@localhost ~]$ which tiup
~/.tiup/bin/tiup

编辑脚本,MYSQL_PASSWD 和 PORT 根据实际替换 
[tidb@localhost ~]$ vi ~/.tiup/bin/ti


#version 1.1
#@author guanguanglei
##########################################################
#date 2023/06/14 version 1.0


#!/bin/sh

MYSQL_USER=root
MYSQL_PASSWD=root 
PORT=4000          
TIDB_HOST=127.0.0.1
TIDB_CONNSTR="mysql -u$MYSQL_USER -p$MYSQL_PASSWD -h$TIDB_HOST -P$PORT"
CLUSTER_NAME=gsc-quotation
case $1 in 
  si)
  ${TIDB_CONNSTR}
  ;;
  info)
  ${TIDB_CONNSTR} -e "select * from information_schema.CLUSTER_INFO;"
  ;;
  user)
  ${TIDB_CONNSTR} -e "select user,host from mysql.user;"
  ;;
  tidb)
  tiup cluster display  $CLUSTER_NAME
  ;;
  edit)
  tiup cluster edit-config  $CLUSTER_NAME
  ;;
  var)
  if [ "$2"x != x ]; then
  ${TIDB_CONNSTR} -e "show variables like '%$2%';"
  else 
    echo "please input second paramter with variable name"
  fi
  ;;
  config)
  if [ "$2"x != x ]; then
  ${TIDB_CONNSTR} -e "show config where name  like '%$2%';"
  else
    echo "please input config "
  fi
  ;;
  list)
  ${TIDB_CONNSTR} -e "select * from information_schema.cluster_processlist;"
  ;;
  listt)
  ${TIDB_CONNSTR} -e "select * from information_schema.cluster_processlist order by time desc ;"
  ;;
  active)
  ${TIDB_CONNSTR} -e "select * from information_schema.cluster_processlist where info is not null order by time desc \G;"
  ;;
  kill)
  ${TIDB_CONNSTR} -e "select concat(concat('mysql -u$MYSQL_USER -p$MYSQL_PASSWD -h ',substring_index(a.INSTANCE,':',1), ' -P',substring_index(a.INSTANCE,':',-1) ,' -e '  ),concat('\"kill tidb ',b.id,';\"')) from information_schema.CLUSTER_info a join information_schema.cluster_processlist b on a.STATUS_ADDRESS=b.instance;"
  ;;
  kstat)
  if [ "$2"x != x ]; then
  ${TIDB_CONNSTR} -e "select concat(concat('mysql -u$MYSQL_USER -p$MYSQL_PASSWD -h ',substring_index(a.INSTANCE,':',1), ' -P',substring_index(a.INSTANCE,':',-1) ,' -e '  ),concat('\"kill tidb ',b.id,';\"')) from information_schema.CLUSTER_info a join information_schema.cluster_processlist b on a.STATUS_ADDRESS=b.instance where state='$2';"
  else 
    echo "please input second paramter with session state"
  fi
  ;;
  ksql)
  if [ "$2"x != x ]; then
  ${TIDB_CONNSTR} -e "select concat(concat('mysql -u$MYSQL_USER -p$MYSQL_PASSWD -h ',substring_index(a.INSTANCE,':',1), ' -P',substring_index(a.INSTANCE,':',-1) ,' -e '  ),concat('\"kill tidb ',b.id,';\"')) from information_schema.CLUSTER_info a join information_schema.cluster_processlist b on a.STATUS_ADDRESS=b.instance where digest='$2';"
  else
    echo "please input second paramter with sql digest"
  fi
  ;;
  kid)
  if [ "$2"x != x ]; then
  ${TIDB_CONNSTR} -e "select concat(concat('mysql -u$MYSQL_USER -p$MYSQL_PASSWD -h ',substring_index(a.INSTANCE,':',1), ' -P',substring_index(a.INSTANCE,':',-1) ,' -e '  ),concat('\"kill tidb ',b.id,';\"')) from information_schema.CLUSTER_info a join information_schema.cluster_processlist b on a.STATUS_ADDRESS=b.instance  where id='$2';"
  else
    echo "please input second paramter with connect id"
  fi
  ;;
  klike)
  if [ "$2"x != x ]; then
  ${TIDB_CONNSTR} -e "select concat(concat('mysql -u$MYSQL_USER -p$MYSQL_PASSWD -h ',substring_index(a.INSTANCE,':',1), ' -P',substring_index(a.INSTANCE,':',-1) ,' -e '  ),concat('\"kill tidb ',b.id,';\"')) from information_schema.CLUSTER_info a join information_schema.cluster_processlist b on a.STATUS_ADDRESS=b.instance  where info like '%$2%';"
  else
    echo "please input info like "
  fi
  ;;
  plan)
  if [ "$2"x != x ]; then
  ${TIDB_CONNSTR} -e  "select SUMMARY_BEGIN_TIME,SUMMARY_END_TIME,STMT_TYPE,SCHEMA_NAME,DIGEST,DIGEST_TEXT,TABLE_NAMES,INDEX_NAMES,QUERY_SAMPLE_TEXT,PLAN_DIGEST,PLAN from information_schema.statements_summary where digest='$2'\G;"
  else
    echo "please input second paramter with sql digest"
  fi
  ;;
  size)
  if [ "$2"x != x ] && [ "$3"x != x ]; then
  ${TIDB_CONNSTR} -e  "SELECT TABLE_NAME,(DATA_LENGTH+INDEX_LENGTH)/1024/1024 mb,TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='$2' AND TABLE_NAME='$3';"
  else
    echo "please input second paramter with table owner and table_name"
  fi
  ;;
  index)
  if [ "$2"x != x ] && [ "$3"x != x ]; then
  ${TIDB_CONNSTR} -e  "show indexes from $2.$3;"
  else
    echo "please input second paramter table_owner table_name"
  fi
  ;;  
  stats_meta)
  if [ "$2"x != x ] && [ "$3"x != x ]; then
  ${TIDB_CONNSTR} -e  "show stats_meta where db_name='$2' table_name='$3';"
  else
    echo "please input second paramter table_owner table_name"
  fi
  ;; 
  stats_histograms)
  if [ "$2"x != x ] && [ "$3"x != x ]; then
  ${TIDB_CONNSTR} -e  "show stats_histograms where  db_name='$2' and db_name='$3';"
  else
    echo "please input second paramter table_owner table_name"
  fi
  ;;
  dump)
    if [ "$2"x != x ] && [ "$3"x != x ]; then
  ${TIDB_CONNSTR} -e  "select concat(' tiup dumpling -uroot -p   -h --filetype csv -t 8 -o /tmp/backup -f   ', '''', table_schema,'.',table_name,'''' ' --sql ''select * from ',table_name,'''') from tables where  table_schema='$2' and table_name='$3';"
  else
    echo "please input second paramter table_owner table_name"
  fi
  ;;
 ctl)
  ${TIDB_CONNSTR} -e  "select concat('tiup ctl:',(select substring(version(),13,19)),'  pd  -u  http://',  (select INSTANCE from information_schema.cluster_info where TYPE='pd' limit 1),'  -i') from dual;
"
  ;;
  *)
   echo
   echo "Usage: mib keyword [value1] ";
   echo 
   echo "  -----------------------------------------------------------------";
   echo "  si                          -- login tidb database";
   echo "  info                        -- show cluster info";
   echo "  tidb                        -- tiup cluster display";
   echo "  edit                        -- show cluster edit";
   echo "  user                        -- list all user";
   echo "  var                         -- show variables like ";
   echo "  config                      -- show config where name like ";
   echo "  list                        -- show  processlist";
   echo "  listt                       -- processlist order by time";  
   echo "  active                       -- processlist order by time limit 10";
   echo "  kill                        -- kill all session ";
   echo "  kstat                       -- kill session state";
   echo "  ksql                        -- kill sql session;";    
   echo "  kid                         -- kill session id";  
   echo "  klike                       -- kill info like "; 
   echo "  plan                        -- list sql plan";  
   echo "  size                        -- get table size ";
   echo "  index                       -- get  on table index";
   echo "  stats_meta                  -- getstats_meta on table";
   echo "  stats_histograms            -- get cloumn statistics on table";
   echo "  ctl                         -- print tiup ctl command";    
;;
esac

修改权限

markdown 复制代码
[tidb@localhost ~]$ chmod 775 ~/.tiup/bin/ti

使用示例

markdown 复制代码
1. 查看集群状态
ti  tidb 

2. 登录数据库
[tidb@localhost ~]$ ti si
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 820992
Server version: 5.7.25-TiDB-v4.0.13-1-g7eeeda700 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

3.查看活跃会话
[tidb@localhost ~]$ ti active 
*************************** 1. row ***************************
INSTANCE: xxxxxxxx :10080
      ID: 820997
    USER: root
    HOST: 127.0.0.1
      DB: NULL
 COMMAND: Query
    TIME: 0
   STATE: 2
    INFO: select * from information_schema.cluster_processlist where info is not null order by time desc
  DIGEST: 6140c4093c70debc9c729807414f36c32fad049daecf2d5655afd10a2374fae9
     MEM: 6
TxnStart: 08-10 15:22:29.866(443456461174472707)

4. 登录pd 
[root@vm10-2-103-65 ~]# ti ctl
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| concat('tiup ctl:',(select substring(version(),13,19)),'  pd  -u  http://',  (select INSTANCE from information_schema.cluster_info where TYPE='pd' limit 1),'  -i') |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tiup ctl:v7.1.0  pd  -u  http://10.2.103.65:2379  -i                                                                                                                |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
[root@vm10-2-103-65 ~]# tiup ctl:v7.1.0  pd  -u  http://10.2.103.65:2379  -i 
Starting component `ctl`: /root/.tiup/components/ctl/v7.1.0/ctl pd -u http://10.2.103.65:2379 -i
>>  

5. 查看参数
[root@vm10-2-103-65 ~]# ti var oom
+--------------------------------+--------+
| Variable_name                  | Value  |
+--------------------------------+--------+
| tidb_enable_tmp_storage_on_oom | ON     |
| tidb_mem_oom_action            | CANCEL |
+--------------------------------+--------+

查看config参数 
root@vm10-2-103-65 ~]# ti config block-cache
+------+--------------------+-------------------------------------------+----------+
| Type | Instance           | Name                                      | Value    |
+------+--------------------+-------------------------------------------+----------+
| tikv | 10.2.103.199:20160 | raftdb.defaultcf.block-cache-size         | 317MiB   |
| tikv | 10.2.103.199:20160 | raftdb.defaultcf.disable-block-cache      | false    |
| tikv | 10.2.103.199:20160 | raftdb.defaultcf.prepopulate-block-cache  | disabled |
| tikv | 10.2.103.199:20160 | rocksdb.defaultcf.block-cache-size        | 3971MiB  |
| tikv | 10.2.103.199:20160 | rocksdb.defaultcf.disable-block-cache     | false    |
| tikv | 10.2.103.199:20160 | rocksdb.defaultcf.prepopulate-block-cache | disabled |

6.查看执行计划
[root@vm10-2-103-65 ~]# ti plan 76069b6abc74fc855272108f656d4d1132948a55a3b12f66eaa4373648380d81
*************************** 1. row ***************************
SUMMARY_BEGIN_TIME: 2023-08-10 15:30:00
  SUMMARY_END_TIME: 2023-08-10 16:00:00
         STMT_TYPE: Select
       SCHEMA_NAME: NULL
            DIGEST: 76069b6abc74fc855272108f656d4d1132948a55a3b12f66eaa4373648380d81
       DIGEST_TEXT: select * from `information_schema` . `cluster_processlist` where `info` is not ? order by time desc
       TABLE_NAMES: information_schema.cluster_processlist
       INDEX_NAMES: NULL
 QUERY_SAMPLE_TEXT: select * from information_schema.cluster_processlist where info is not null order by time desc
       PLAN_DIGEST: deabf06ff5a37585b637b6bc4ddf0bb2affc0aa92148953d10f678359c7cda69
              PLAN:     id                      task            estRows operator info                                                   actRows execution info                                                                                                                                                                      memory          disk
        Sort_5                  root            9990    information_schema.cluster_processlist.time:desc                1       time:41.9ms, loops:2                                                                                                                                                                7.70 KB         0 Bytes
        └─TableReader_10        root            9990    data:Selection_9                                                1       time:41.9ms, loops:2, cop_task: {num: 2, max: 41.8ms, min: 41.5ms, avg: 41.6ms, p95: 41.8ms, rpc_num: 2, rpc_time: 83.2ms, copr_cache_hit_ratio: 0.00, max_distsql_concurrency: 2}  727 Bytes       N/A
          └─Selection_9         cop[tidb]       9990    not(isnull(information_schema.cluster_processlist.info))        0                                                                                                                                                                                           N/A             N/A
            └─TableFullScan_8   cop[tidb]       10000   table:CLUSTER_PROCESSLIST, keep order:false, stats:pseudo       0                                                                                                                                                                                           N/A             N/A


7. kill 会话 
[root@vm10-2-103-65 ~]# ti kid 716063544658887111
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| concat(concat('mysql -uroot -pM4Ab_d03%pQ27^1Xa# -h ',substring_index(a.INSTANCE,':',1), ' -P',substring_index(a.INSTANCE,':',-1) ,' -e '  ),concat('"kill tidb ',b.id,';"')) |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| mysql -uroot -pM4Ab_d03%pQ27^1Xa# -h 10.2.103.65 -P4000 -e "kill tidb 716063544658887111;"                                                                                    |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
[root@vm10-2-103-65 ~]#  mysql -uroot -pM4Ab_d03%pQ27^1Xa# -h 10.2.103.65 -P4000 -e "kill tidb 716063544658887111;"  


8.常用命令
[root@vm10-2-103-65 ~]# ti 

Usage: mib keyword [value1] 

  -----------------------------------------------------------------
  si                          -- login tidb database
  info                        -- show cluster info
  user                        -- list all user
  var                         -- show variables like 
  config                      -- show config where name like 
  list                        -- show  processlist
  listt                       -- processlist order by time
  active                       -- processlist order by time limit 10
  kill                        -- kill all session 
  kstat                       -- kill session state
  ksql                        -- kill sql session;
  kid                         -- kill session id
  klike                       -- kill info like 
  plan                        -- list sql plan
  size                        -- get table size 
  index                       -- get  on table index
  stats_meta                  -- getstats_meta on table
  stats_histograms            -- get cloumn statistics on table
  ctl                         -- print tiup ctl command
相关推荐
.生产的驴35 分钟前
Docker 部署Nacos 单机部署 MYSQL数据持久化
android·运维·spring boot·sql·mysql·docker·容器
MXsoft6181 小时前
一体化运维监控管理平台:产品架构与功能解析
大数据·运维·数据库
Canon_YK2 小时前
响应“一机两用”政策 落实政务外网安全
运维·网络·安全·web安全·网络安全
找藉口是失败者的习惯2 小时前
Android adb 指令大全
android·adb
陈煜的博客2 小时前
paddleOcr -Linux 下的 Conda 安装
linux·运维·conda
乐维_lwops3 小时前
网络安全:数字时代的守护盾
运维·网络
上理考研周导师3 小时前
【智能化仪表设计】化工仪表及自动化全套课件
运维·自动化
挥剑决浮云 -3 小时前
Linux 网络编程
linux·运维·c语言·网络·笔记
北 染 星 辰3 小时前
Linux---常用shell脚本
linux·运维·服务器
潇湘秦4 小时前
AI助力智能运维!在Linux主机上实现和chatgpt对话
运维·ai