TiDB 数据备份与升级

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数据库全量逻辑备份

备份策略

每天进行一次全量备份存在本地磁盘,每周将本地备份数据向对象存储系统推送一次。

备份前的准备

  • 本地磁盘
    1. 容量:1TB(根据数据库数据量决定)
    2. 设置开机自动挂载
      vi /etc/rc.local
      mount /dev/vdb1 /mnt/bak/bak  #假设本地盘位置为/dev/vdb1,挂载点为/mnt/bak/bak
  • 推送数据的服务器
    1. 可连接tidb数据库
    2. 安装lftp 4.9.2及以上版本
      yum install lftp -y  #安装lftp
      lftp -v #查看版本是否合适
    3. 可使用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执行全量备份任务

类别:

Recent Comments

您尚未收到任何评论。