有br每天自动备份的脚本吗,能不能分享一个

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】7.5
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】

打算做每天做BR全库备份,定期删除超过一定时间的,看看有没有类似脚本参考下

就简单几个核心逻辑
备份 然后扫描文档判断文件要不要删除就好了

自己写个shell嘛

#########以下数据库整库备份#########################################################
#备份数据库tidb
date1=date +'%y%m%d'
mkdir -p /data/tidbback/$date1
chmod -R 777 /data/tidbback/$date1
cd /opt/tidb-toolkit-v5.0.0-linux-amd64/bin
./br backup full --pd “xxxxx:2379” -s local:///data/tidbback/$date1 --ratelimit 256 --log-file backupfull.log
#压缩并删除原数据
cd /data/tidbback
tar -zcvf tidb_$date1.tar.gz $date1
rm -rf $date1

删除30天以前备份
find /data/tidbback/ -maxdepth 1 -mtime +29 -type f -name “*.tar.gz” | xargs rm -rf

在服务器上设置个定时任务每天凌晨1点执行
0 1 * * * sh /data/scripts/backup.sh &

具体需求自己shell里面写

3 个赞

谢谢,我试试,这个不错

这个需要每个节点都写个crotab吗

我是有个单独的备份服务器,磁盘做个nfs挂载到所有的kv节点上,脚本只需要放到这个备份服务器就行,br备份的时候通过pd连接到集群,备份文件会自动存储到这个挂载磁盘,不需要在每个节点执行脚本。

br不用每个节点都写个crotab,一般用tiup调用br就行

好的了解,谢谢

比起每天全量快照备份,我觉得一周一次全量快照备份,然后增量的pitr日志备份一直开着会比较省事。

https://docs.pingcap.com/zh/tidb/stable/br-pitr-guide

测试了下,nfs共享目录/nfs 备份目录/nfs/日期 自动做成tar包删除备份文件

br.sh文件内容:
/root/.tiup/components/br/v7.6.0/br backup full --pd 192.168.19.207:2379 --storage local:///nfs/$(date +%Y%m%d) --log-file /nfs/b$(date +%Y%m%d).log --concurrency=10
cd /nfs
tar cvf br_$(date +%Y%m%d).tar $(date +%Y%m%d)
rm -rf $(date +%Y%m%d)

crontab 计划任务
51 22 * * * /root/br.sh

压成gz测试没有意义,非常慢,压缩效果基本没有

我是一个礼拜备份一次的,打包完上传oss会方便一点。

#!/bin/bash
#
# auth: wfxxh
# desc: 定期全量备份生产tidb数据,并删除过期的全量和增量,每3天执行一次
# name: br-fullbackup.sh

TODAY=`date +%Y%m%d`

source /home/tidb/.bash_profile

echo > /home/tidb/br/br-fullstatus.log
echo > /home/tidb/br/log/br-date.log

#执行全量备份
tiup br:v6.5.3 backup full --pd "pd地址" --storage "s3://wfmodel/tidb-br/tidb-online/fullbackup/${TODAY}?endpoint=s3地址&access-key=你的key&secret-access-key=你的secret" --ratelimit 128 --log-file /home/tidb/br/log/br-fullbackup-${TODAY}.log

echo $TODAY >> /home/tidb/br/stats/fullbackup

SIX_DAY_AGO=`tail -3 /home/tidb/br/stats/fullbackup | head -1`

#获取6天前的全量备份的时间点
FULL_BACKUP_TS=`tiup br:v6.5.3 validate decode --field="end-version" --storage "s3://wfmodel/tidb-br/tidb-online/fullbackup/${SIX_DAY_AGO}?endpoint=s3地址&access-key=你的key&secret-access-key=你的secret" --log-file /home/tidb/br/log/br-date.log | tail -1`

#判断上一步获取的时间与日志中的是否相等
LOG_FULL_BACKUP_TS=`tail -1 /home/tidb/br/log/br-fullbackup-${SIX_DAY_AGO}.log | awk -F 'BackupTS=' '{print $2}' | awk -F ']' '{print $1}'`

if [[ $FULL_BACKUP_TS == $LOG_FULL_BACKUP_TS ]];then
  #激活conda环境
  source /home/tidb/.bashrc

  #切换虚拟环境
  conda activate aws-client

  #删除过期全量备份(9天前的), 保留两个历史版本
  NINE_DAY_AGO=`tail -4 /home/tidb/br/stats/fullbackup | head -1`

  aws --endpoint-url 你的s3地址 s3 rm --recursive s3://wfmodel/tidb-br/tidb-online/fullbackup/${NINE_DAY_AGO}
  
  #删除过期增量备份(6天前的)
  tiup br:v6.5.3 log truncate --until=${FULL_BACKUP_TS} --storage 's3://wfmodel/tidb-br/tidb-online/logbackup?endpoint=s3地址&access-key=你的key&secret-access-key=你的secret" -y --log-file /home/tidb/br/log/br-truncate-${TODAY}.log
else
  echo "`date +'%Y-%m-%d %H:%M:%S'` FAILED" > /home/tidb/br/br-fullstatus.log
fi

这个多简单呀,随意发挥写一个就成

tar下就行,不要压成tar.gz,速度慢10倍,sst文件是压缩过的再压缩没有意义了

看起来更高大上点 :grinning:

学习到了

#!/bin/bash

timestr=date +"%Y%m%d"
host_group=‘tidb集群’ #项目所属或细胞核
host_master=‘10.0.47.22’ #主库vip,没有vip填写主库真实ip
port_master=4000 #主库端口
host_backup=‘10.0.47.22’ #备份库的ip
port_backup=4000 #份库的端口
Backup_msg=‘’ #备份错误消息收集
backdir=“/mnt/storageback/tidb_backup”
putdir=${backdir}/${timestr} #备份数据库目录

/usr/bin/find /mnt/storageback/tidb_backup/* -maxdepth 1 -type d -mtime +30| xargs rm -fr

/root/.tiup/bin/tiup br backup db --pd “10.0.47.21:2379” --db custom_forms_db --storage “local:///mnt/storageback/tidb_backup/$timestr” --ratelimit 120 --log-file /mnt/storageback/tidb_backup/backupdb_${timestr}.log

1 个赞

/mnt/storageback是共享目录

使用系统的cron试试。

这个需要每个tikv节点部署这个脚本还是只要一个节点?