tidb集群操作

#!/usr/bin/python3
# encoding: utf-8
#filename: tidb-maintenance.py
#author: gaohaixiang
#writetime:202403041043

import subprocess
import sys
import time

"""
# 脚本使用示例
# 集群状态查询并重启失败的服务
python3 tidb-maintenance.py checkServiceForTidb

# 集群的具体操作
# 启动 tidb 集群
python3 tidb-maintenance.py operateTidbCluster tidbStartCluster
# 查看 tidb 集群状态
python3 tidb-maintenance.py operateTidbCluster tidbStatusCluster
# 重启 tidb 集群的某个服务,grafana,pd,prometheus,tidb,tikv
python3 tidb-maintenance.py operateTidbCluster tidbRestartSomeServiceCluster grafana
# 重启 tidb 集群
python3 tidb-maintenance.py operateTidbCluster tidbRestartCluster
# 停止 tidb 集群
python3 tidb-maintenance.py operateTidbCluster tidbStopCluster

# 备注
# 请注意tidb服务所在的ip段,再检测集群服务状态时候需要使用到该ip的段,需要按情修改,第97行
lines.startswith("172.31.")

# tidb集群操作示例
# 启动集群:
/root/.tiup/bin/tiup cluster start tidb-cluster
# 查看集群状态:
/root/.tiup/bin/tiup cluster display tidb-cluster
# 手动重启某个服务
/root/.tiup/bin/tiup cluster start tidb-cluster -R grafana
/root/.tiup/bin/tiup cluster start tidb-cluster -R tidb
# 重启集群
/root/.tiup/bin/tiup cluster restart tidb-cluster
# 停止集群
/root/.tiup/bin/tiup cluster stop tidb-cluster
"""

# 启动 tidb 集群
def tidbStartCluster(getdatetime,filewrite):
    fileWriteLine(getdatetime,filewrite)
    # tiup cluster start tidb-cluster
    output = subprocess.getoutput("/root/.tiup/bin/tiup cluster start tidb-cluster")
    filewrite.writelines("\ntidbStartCluster\n")
    filewrite.writelines(output)
    return output

# 查看 tidb 集群状态
def tidbStatusCluster(getdatetime,filewrite):
    fileWriteLine(getdatetime,filewrite)
    # tiup cluster display tidb-cluster
    output = subprocess.getoutput("/root/.tiup/bin/tiup cluster display tidb-cluster")
    filewrite.writelines("\ntidbStatusCluster\n")
    filewrite.writelines(output)
    return output

# 重启 tidb 集群的某个服务
def tidbRestartSomeServiceCluster(getdatetime,someService,filewrite):
    fileWriteLine(getdatetime,filewrite)
    # tiup cluster start tidb-cluster -R grafana
    output = subprocess.getoutput("/root/.tiup/bin/tiup cluster start tidb-cluster -R %s" % someService)
    filewrite.writelines("\ntidbRestartSomeServiceCluster\n")
    filewrite.writelines("重启 %s 服务\n" % someService)
    filewrite.writelines(output)
    return output

# 重启 tidb 集群
def tidbRestartCluster(getdatetime,filewrite):
    fileWriteLine(getdatetime,filewrite)
    # tiup cluster restart tidb-cluster
    output = subprocess.getoutput("/root/.tiup/bin/tiup cluster restart tidb-cluster")
    filewrite.writelines("\ntidbRestartCluster\n")
    filewrite.writelines(output)
    return output

# 停止 tidb 集群
def tidbStopCluster(getdatetime,filewrite):
    fileWriteLine(getdatetime,filewrite)
    # tiup cluster stop tidb-cluster
    output = subprocess.getoutput("/root/.tiup/bin/tiup cluster stop tidb-cluster")
    filewrite.writelines("\ntidbStopCluster\n")
    filewrite.writelines(output)
    return output

# 查看集群的服务状态,当有服务不正常时,重启该服务
def checkServiceForTidb(getdatetime,filewrite):
    getoutput = tidbStatusCluster(getdatetime,filewrite)
    linelist = getoutput.split("\n")
    for lines in linelist:
        if lines.startswith("172.31."):
            lists = lines.split()
            # print(lists)
            # 服务名称
            serviceName = lists[1]
            # 服务状态
            serviceStatus = lists[5]

            # 如果服务不是 Up 或者 Up|L|UI 则重启该服务
            if serviceStatus == "Up" or serviceStatus == "Up|L|UI":
                print(serviceName, serviceStatus)
            else:
                tidbRestartSomeServiceCluster(getdatetime,serviceName, filewrite)

# 日志文件写入换行间隔
def fileWriteLine(getdatetime,filewrite):
    filewrite.writelines("\n-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_\n")
    filewrite.writelines(getdatetime)

# 日期时间获取
def timestamp_time():
    timestamp = int(time.time())
    # 转换成localtime(格式和时间戳一样)
    timelocal = time.localtime(timestamp)
    # 转换成新的时间格式(3016-05-05 20:28:54)
    datetime = time.strftime("%Y%m%d%H%M%S", timelocal)
    return datetime

def main(getdatetime,filewrite):
    sysargv = sys.argv[1]

    # 服务检测并重启失败的服务
    if sysargv == "checkServiceForTidb":
        checkServiceForTidb(getdatetime,filewrite)

    elif sysargv == "operateTidbCluster":
        sysargvs = sys.argv[2]
        # 服务 集群操作
        # # 启动 tidb 集群
        if sysargvs == "tidbStartCluster":
            tidbStartCluster(getdatetime,filewrite)
        # 查看 tidb 集群状态
        elif sysargvs == "tidbStatusCluster":
            getoutput = tidbStatusCluster(getdatetime,filewrite)
            print(getoutput)
        # 重启 tidb 集群的某个服务
        elif sysargvs == "tidbRestartSomeServiceCluster":
            sysargvsservice = sys.argv[3]
            tidbRestartSomeServiceCluster(getdatetime,sysargvsservice,filewrite)
        # 重启 tidb 集群
        elif sysargvs == "tidbRestartCluster":
            tidbRestartCluster(getdatetime,filewrite)
        # 停止 tidb 集群
        elif sysargvs == "tidbStopCluster":
            tidbStopCluster(getdatetime,filewrite)
        else:
            print("请输入正确的操作参数。。。。")
    else:
        print("请输入集群的正确操作类型")


if __name__ == '__main__':
    # 脚本及日志存放路径
    logdir = "/data/processlog/"
    # 日志文件
    tidblog = "tidblog.log"
    tidbfile = logdir + tidblog

    # 时间获取
    getdatetime = timestamp_time()

    filewrite = open(tidbfile,"a+",encoding="UTF8")
    # 主函数入口
    main(getdatetime,filewrite)
    filewrite.close()

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以通过使用JDBC来连接到TiDB集群。以下是连接到TiDB集群的步骤: 1. 添加依赖:在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. 配置数据库连接信息:在`application.properties`(或`application.yaml`)文件中添加以下配置: ```properties spring.datasource.url=jdbc:mysql://<tidb-host>:<tidb-port>/<database>?useSSL=false&serverTimezone=UTC spring.datasource.username=<username> spring.datasource.password=<password> ``` 将`<tidb-host>`替换为TiDB集群中的主机地址,`<tidb-port>`替换为TiDB服务的端口号,`<database>`替换为要连接的数据库名称,`<username>`和`<password>`替换为您的数据库凭据。 3. 创建实体类:创建一个Java类来映射数据库表。例如,如果要操作一个名为`user`的表,可以创建一个名为`User`的实体类。 ```java @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; // Getters and setters } ``` 4. 创建仓库接口:创建一个继承自`JpaRepository`或其他相关接口的仓库接口,用于定义数据库操作。 ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { // 自定义查询方法 } ``` 5. 使用数据库操作:可以在业务逻辑中使用自动注入的仓库接口来进行数据库操作。 ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> getAllUsers() { return userRepository.findAll(); } // 其他数据库操作方法 } ``` 通过以上步骤,您就可以使用Spring Boot连接到TiDB集群并进行数据库操作了。根据具体需求,还可以使用其他相关技术和框架,如事务管理、连接池配置等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值