TiDB数据库在线不停机升级
首先去官网确认当前版本是否可以使用tiup直接在线升级。
切换系统用户tidb
若使用root用户部署,忽略该步骤。
su tidb
cd ~
source .bash_profile
使用代理连网
根据本云主机所在网段进行配置
升级tiup工具及组件
tiup update --self
tiup update cluster
默认升级至最新版本
检查集群DDL和backup情况
使用以下sql语句查看当前集群的备份及DDL操作。请等待 DDL 执行完成或使用 ADMIN CANCEL DDL
命令取消该 DDL Job 后再进行升级。
SHOW BACKUPS;
SHOW RESTORES;
ADMIN SHOW DDL;
检查集群状态
tiup cluster check <cluster-name> --cluster
需在提示所有region均为健康的状态情况下进行升级操作。
在线升级
tiup cluster upgrade <cluster-name> v8.1.1
在线升级至指定版本。升级完成后,使用命令tiup cluster display <cluster-name>
查看集群是否升级成功。
升级时关于重启节点超时的处理
使用 replay 子命令来重试upgrade操作,该操作忽略已升级重启过的节点。
tiup cluster audit
tiup cluster replay <audit-id>
TiDB数据库全量逻辑备份
备份策略
每天进行一次全量备份存在本地磁盘,每周将本地备份数据向对象存储系统推送一次。
备份前的准备
- 本地磁盘
- 容量:1TB(根据数据库数据量决定)
- 设置开机自动挂载
vi /etc/rc.local mount /dev/vdb1 /mnt/bak/bak #假设本地盘位置为/dev/vdb1,挂载点为/mnt/bak/bak
- 推送数据的服务器
- 可连接tidb数据库
- 安装lftp 4.9.2及以上版本
yum install lftp -y #安装lftp lftp -v #查看版本是否合适
- 可使用lftp访问对象存储系统,可使用自己的对象存储系统,也可使用中国科技云对象存储系统
lftp ftp://存储桶名:桶读写密码@服务器地址 #中国科技云对象存储系统ftp访问地址:obsftp.cstcloud.cn
备份脚本
编辑备份脚本bak.sh
#! /bin/sh
#备份数据库
host="10.x.x.x"
port="4000"
username="root"
password="xxxxxxxxx"
#备份路径
dir="/mnt/bak/bak"
#5天前时间获取
PeriodTime=`date -d "5 days ago" +%Y%m%d`
#删除5天前的备份数据
files=$(ls -l $dir |awk '/^-/ {print $NF}')
for file in $files
do
if [ $PeriodTime -gt ${file:0:8} ]; then
echo $file
rm -f $dir/$file
fi
done
#当前时间获取
date=`date -d today +"%Y%m%d%H%M"`
#备份指定数据库
mysqldump -h$host -u$username -p$password -P$port 数据库名称 > $dir/$date-数据库名称.sql
#上一次备份时间获取
date1=`date -d yesterday +"%Y%m%d"`
#备份存储桶信息
bucket="backup"
ftp_server="xxxxx"
ftp_rw="xxxxx"
bak_files=$(ls -l $dir |awk '/^-/ {print $NF}')
week=`date +%w`
#周日上传上一次备份数据至对象存储桶,遍历备份目录匹配文件前缀
if [ $week -eq 0 ]
then
for f in $bak_files
do
if [ $date1 -eq ${f:0:8} ]; then
tmp_file=$dir/$f
lftp ftp://${bucket}:${ftp_rw}@${ftp_server} <<EOF
cd /bak
put ${tmp_file}
exit
EOF
fi
done
echo "上传完成"
else
echo "不是上传时间"
fi
定时任务
编辑每日定时任务,示例:
crontab -e
30 23 * * * /root/bak.sh #每天23:30执行全量备份任务