Copilot 的魔法让 TiDB 离线升级变得轻松愉快
- 2024-04-26 北京
本文字数:4977 字
阅读完需:约 16 分钟
作者: madcoder 原文来源:https://tidb.net/blog/4837974d
下载离线镜像
更新 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 一本正经的胡说八道,有可能你就当真了。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/492aa8bc55c2ab3175f4c52ad】。文章转载请联系作者。
TiDB 社区干货传送门
TiDB 社区官网:https://tidb.net/ 2021-12-15 加入
TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/
评论