Copilot的魔法让TiDB离线升级变得轻松愉快

2024年 5月 7日 79.1k 0

下载离线镜像

TiDB 社区版地址

更新 TiUP 离线镜像

可以参考使用 TiUP 部署 TiDB 集群 的步骤下载部署新版本的 TiUP 离线镜像,上传到中控机。在执行 local_install.sh 后,TiUP 会完成覆盖升级。

tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz
sh tidb-community-server-${version}-linux-amd64/local_install.sh
source /home/tidb/.bash_profile  #  这里应该是source /home/tidb/.bashrc

使用Tiup -version 检查升级后的版本

覆盖升级完成后,需将 server 和 toolkit 两个离线镜像合并,执行以下命令合并离线组件到 server 目录下。

tar xf tidb-community-toolkit-${version}-linux-amd64.tar.gz
ls -ld tidb-community-server-${version}-linux-amd64 tidb-community-toolkit-${version}-linux-amd64
cd tidb-community-server-${version}-linux-amd64/
cp -rp keys ~/.tiup/
tiup mirror merge ../tidb-community-toolkit-${version}-linux-amd64

离线镜像合并后,执行下列命令升级 Cluster 组件:

tiup update cluster tidb v8.0.0

如果记录只是这些那真没有必要,因为官方文档已经很详细了,升级也就那么几步。但是越简单重复的工作越容易出错,怎样避免将错误降低,把容易犯错的步骤交给机器。

自动升级

让Copilot给出你想要的脚本

你

### **更新 TiUP 离线镜像**

可以参考[使用 TiUP 部署 TiDB 集群](https://docs.pingcap.com/zh/tidb/stable/production-deployment-using-tiup)的步骤下载部署新版本的 TiUP 离线镜像,上传到中控机。在执行 `local_install.sh` 后,TiUP 会完成覆盖升级。

// 省略...将上面升级步骤丢给Copilot

Copilot

您的步骤看起来是正确的。这是一个基本的过程,用于更新 TiUP 离线镜像并升级 TiDB 集群。如果在执行这些步骤后 TiUP 运行出现错误,那可能是由于 manifest 文件未更新。在这种情况下,您可以尝试运行 **`rm -rf ~/.tiup/manifests/*`** 来删除旧的 manifest 文件,然后再次使用 TiUP。

请注意,每次执行这些步骤时,都需要将 **`${version}`** 替换为您要安装或升级的 TiDB 版本号。

如果您在执行这些步骤时遇到任何问题,或者需要进一步的帮助,随时向我提问。我会尽我所能提供帮助。😊

你

根据我提供的内容生成bash脚本
Copilot

当然,这是一个基于您提供的步骤生成的 bash 脚本。请注意,您需要根据实际情况替换 **`${version}`** 和 **`v8.0.0`**。

`#!/bin/bash

# 定义版本
version="v8.0.0"

# 解压 TiDB 社区服务器
tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz

# 执行本地安装脚本
sh tidb-community-server-${version}-linux-amd64/local_install.sh

# 更新 bashrc
source /home/tidb/.bashrc

# 检查 TiUP 版本
tiup -version

# 解压工具包
tar xf tidb-community-toolkit-${version}-linux-amd64.tar.gz

# 列出服务器和工具包目录
ls -ld tidb-community-server-${version}-linux-amd64 tidb-community-toolkit-${version}-linux-amd64

# 切换到服务器目录
cd tidb-community-server-${version}-linux-amd64/

# 复制密钥
cp -rp keys ~/.tiup/

# 合并离线组件到服务器目录
tiup mirror merge ../tidb-community-toolkit-${version}-linux-amd64

# 升级 Cluster 组件
tiup update cluster tidb ${version}

# 如果 TiUP 运行报错,尝试删除旧的 manifest 文件
if [ $? -ne 0 ]; then
    rm -rf ~/.tiup/manifests/*
fi`

这个脚本应该能帮助您自动化 TiUP 离线镜像的更新和 TiDB 集群的升级过程。在运行此脚本之前,请确保您已经正确地设置了 **`version`** 变量,并且所有的 tar.gz 文件都在当前目录下。如果在运行过程中遇到任何问题,欢迎随时向我提问。😊

你

版本号在脚本外输入,在检查TiUP后插入,是否进入下一步,输入Y继续

Copilot

好的,根据您的要求,我修改了脚本。现在,脚本会在检查 TiUP 版本后提示您是否继续。如果您输入 ‘Y’ 或 ‘y’,脚本将继续执行。此外,脚本现在会在开始时提示您输入版本号。

`#!/bin/bash

# 提示用户输入版本号
read -p "请输入版本号: " version

# 解压 TiDB 社区服务器
tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz

# 执行本地安装脚本
sh tidb-community-server-${version}-linux-amd64/local_install.sh

# 更新 bashrc
source /home/tidb/.bashrc

# 检查 TiUP 版本
tiup -version

# 提示用户是否继续
read -p "是否继续? (Y/n): " answer
if [[ $answer != "Y" && $answer != "y" ]]; then
    echo "脚本已终止。"
    exit 1
fi

# 解压工具包
tar xf tidb-community-toolkit-${version}-linux-amd64.tar.gz

# 列出服务器和工具包目录
ls -ld tidb-community-server-${version}-linux-amd64 tidb-community-toolkit-${version}-linux-amd64

# 切换到服务器目录
cd tidb-community-server-${version}-linux-amd64/

# 复制密钥
cp -rp keys ~/.tiup/

# 合并离线组件到服务器目录
tiup mirror merge ../tidb-community-toolkit-${version}-linux-amd64

# 升级 Cluster 组件
tiup update cluster tidb ${version}

# 如果 TiUP 运行报错,尝试删除旧的 manifest 文件
if [ $? -ne 0 ]; then
    rm -rf ~/.tiup/manifests/*
fi`

这个脚本应该满足您的需求。如果有任何问题,或者需要进一步的帮助,欢迎随时向我提问。😊

你

还是不够严谨,需要在解压前检查文件是否存在,在更新 前也需要询问是否继续

Copilot

您的反馈非常重要,我理解您希望脚本在执行关键步骤之前进行更多的检查。以下是根据您的要求修改的脚本:

`#!/bin/bash

# 提示用户输入版本号
read -p "请输入版本号: " version

# 检查文件是否存在
if [[ ! -f tidb-community-server-${version}-linux-amd64.tar.gz ]] || [[ ! -f tidb-community-toolkit-${version}-linux-amd64.tar.gz ]]; then
    echo "文件不存在,请检查版本号和文件路径。"
    exit 1
fi

# 解压 TiDB 社区服务器
tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz

# 执行本地安装脚本
sh tidb-community-server-${version}-linux-amd64/local_install.sh

# 更新 bashrc
source /home/tidb/.bashrc

# 检查 TiUP 版本
tiup -version

# 提示用户是否继续
read -p "是否继续? (Y/n): " answer
if [[ $answer != "Y" && $answer != "y" ]]; then
    echo "脚本已终止。"
    exit 1
fi

# 解压工具包
tar xf tidb-community-toolkit-${version}-linux-amd64.tar.gz

# 列出服务器和工具包目录
ls -ld tidb-community-server-${version}-linux-amd64 tidb-community-toolkit-${version}-linux-amd64

# 切换到服务器目录
cd tidb-community-server-${version}-linux-amd64/

# 复制密钥
cp -rp keys ~/.tiup/

# 合并离线组件到服务器目录
tiup mirror merge ../tidb-community-toolkit-${version}-linux-amd64

# 提示用户是否继续
read -p "是否继续升级? (Y/n): " answer
if [[ $answer != "Y" && $answer != "y" ]]; then
    echo "脚本已终止。"
    exit 1
fi

# 升级 Cluster 组件
tiup update cluster tidb ${version}

# 如果 TiUP 运行报错,尝试删除旧的 manifest 文件
if [ $? -ne 0 ]; then
    rm -rf ~/.tiup/manifests/*
fi`

这个脚本现在会在解压文件和升级 Cluster 组件之前检查文件是否存在和询问用户是否继续。如果有任何问题,或者需要进一步的帮助,欢迎随时向我提问。😊

你

集群tidb名字也需要输入

Copilot

好的,我已经将脚本修改为在升级 Cluster 组件之前提示您输入集群的名字。以下是修改后的脚本:

`#!/bin/bash

# 提示用户输入版本号
read -p "请输入版本号: " version

# 检查文件是否存在
if [[ ! -f tidb-community-server-${version}-linux-amd64.tar.gz ]] || [[ ! -f tidb-community-toolkit-${version}-linux-amd64.tar.gz ]]; then
    echo "文件不存在,请检查版本号和文件路径。"
    exit 1
fi

# 解压 TiDB 社区服务器
tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz

# 执行本地安装脚本
sh tidb-community-server-${version}-linux-amd64/local_install.sh

# 更新 bashrc
source /home/tidb/.bashrc

# 检查 TiUP 版本
tiup -version

# 提示用户是否继续
read -p "是否继续? (Y/n): " answer
if [[ $answer != "Y" && $answer != "y" ]]; then
    echo "脚本已终止。"
    exit 1
fi

# 解压工具包
tar xf tidb-community-toolkit-${version}-linux-amd64.tar.gz

# 列出服务器和工具包目录
ls -ld tidb-community-server-${version}-linux-amd64 tidb-community-toolkit-${version}-linux-amd64

# 切换到服务器目录
cd tidb-community-server-${version}-linux-amd64/

# 复制密钥
cp -rp keys ~/.tiup/

# 合并离线组件到服务器目录
tiup mirror merge ../tidb-community-toolkit-${version}-linux-amd64

# 提示用户输入集群名字
read -p "请输入集群名字: " cluster_name

# 提示用户是否继续
read -p "是否继续升级? (Y/n): " answer
if [[ $answer != "Y" && $answer != "y" ]]; then
    echo "脚本已终止。"
    exit 1
fi

# 升级 Cluster 组件
tiup update cluster ${cluster_name} ${version}

# 如果 TiUP 运行报错,尝试删除旧的 manifest 文件
if [ $? -ne 0 ]; then
    rm -rf ~/.tiup/manifests/*
fi`

这个脚本现在会在升级 Cluster 组件之前提示您输入集群的名字。如果有任何问题,或者需要进一步的帮助,欢迎随时向我提问。😊

执行结果

bash updatetidb.sh  v8.0.0
Disable telemetry success
Successfully set mirror to /opt/tidb/tidb-community-server-v8.0.0-linux-amd64
Detected shell: bash
Shell profile:  /home/tidb/.bashrc
Installed path: /home/tidb/.tiup/bin/tiup
===============================================
1. source /home/tidb/.bashrc
2. Have a try:   tiup playground
===============================================
1.15.0 tiup
Go Version: go1.21.8
Git Ref: v1.15.0
GitHash: 48f15f405450faf7d57136e629285724a0713cde
Tiup升级完成,是否继续合并离线镜像? (Y/n): Y
drwxr-xr-x 4 tidb tidb 4096 Apr  1 18:33 tidb-community-server-v8.0.0-linux-amd64
drwxr-xr-x 3 tidb tidb 4096 Apr  1 18:35 tidb-community-toolkit-v8.0.0-linux-amd64
是否继续升级集群? (Y/n): Y
请输入集群名字: tidb
Before the upgrade, it is recommended to read the upgrade guide at https://docs.pingcap.com/tidb/stable/upgrade-tidb-using-tiup  and finish the preparation steps.
This operation will upgrade tidb v8.0.0 cluster tidb to v8.0.0:
will upgrade and restart component "                 pd" to "v8.0.0",
will upgrade and restart component "               tikv" to "v8.0.0",
will upgrade and restart component "               tidb" to "v8.0.0",
will upgrade and restart component "         prometheus" to "v8.0.0",
will upgrade and restart component "            grafana" to "v8.0.0",
will upgrade and restart component "       alertmanager" to "",
will upgrade component     "node-exporter" to "",
will upgrade component "blackbox-exporter" to "".
Do you want to continue? [y/N]:(default=N) y
Upgrading cluster...
#.....
Upgraded cluster `tidb` successfully

本文记录了如何在离线环境中升级TiDB,以及如何在日常工作中使用Copilot。Copilot在生成脚本方面表现出了实用性,它能够根据用户的需求生成具体的脚本,从而简化了升级过程。同时,Copilot也是一个强大的搜索引擎,它能够提供丰富的信息和知识,帮助用户解决问题。

然而,使用Copilot也需要一定的审查能力。虽然Copilot的目标是提供最准确和最相关的信息,但有时候它也可能会提供一些不准确或者不相关的信息。这就需要用户对Copilot的输出进行审查,确保信息的准确性和可靠性。Copilot一本正经的胡说八道,有可能你就当真了。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论