Administrator
发布于 2023-07-19 / 84 阅读
0
0

Tdengine Backup & Restore

refer to : https://docs.taosdata.com/reference/taosdump/

简介

taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序。

taosdump 可以用数据库、超级表或普通表作为逻辑数据单元进行备份,也可以对数据库、超级 表和普通表中指定时间段内的数据记录进行备份。使用时可以指定数据备份的目录路径,如果 不指定位置,taosdump 默认会将数据备份到当前目录。

如果指定的位置已经有数据文件,taosdump 会提示用户并立即退出,避免数据被覆盖。这意味着同一路径只能被用于一次备份。 如果看到相关提示,请小心操作。

taosdump 是一个逻辑备份工具,它不应被用于备份任何原始数据、环境设置、 硬件信息、服务端配置或集群的拓扑结构。taosdump 使用 Apache AVRO 作为数据文件格式来存储备份数据。

安装

taosdump 有两种安装方式:

安装 taosTools 官方安装包, 请从发布历史页面页面找到 taosTools 并下载安装。
单独编译 taos-tools 并安装, 详情请参考 taos-tools 仓库。


如果选择安装taosTools,那么
taosTools的版本选择,需要和tdengine版本一致,最好的是同一天发布的。

TdengineTaosTools
3.0.02.1.3
3.0.3.22.4.11
3.0.4.22.5.0

下载rpm文件,使用yum install来实现安装,如果想卸载,可以使用yum remove来卸载。

查看已安装的taostools

[root@linu1 20230719]# yum list installed | grep taos
taostools.x86_64                            2.1.3-3                    @/taosTools-2.1.3-Linux-x64

安装好后,查看版本号

[root@linu1 20230719]# taosdump --version
taosdump version 2.1.3

备份

备份命令

echo "long123456" | /usr/local/bin/taosdump --user=root -p -o /opt/TdengineBackup/20230719/ -D iot

上面使用的是交互式风格,来输入密码,也可以直接-p加密码的方式,如下:

/usr/local/bin/taosdump  --user=root -plong123456 -o /opt/TdengineBackup/2023-07-23 -D iot 

全量备份

全量备份脚本如下:

vim taos_full_dump.sh

内容如下:

#!/bin/bash

#保存备份个数,备份7天数据
number=3
#备份保存路径
backup_dir=/opt/TdengineBackup/Full
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`

#如果文件夹不存在则创建
if [ ! -d $backup_dir/$dd ];
then     
    mkdir -p $backup_dir/$dd;
fi

cd $backup_dir/$dd

/usr/local/bin/taosdump  --user=root -plong123456 -o ${backup_dir}/${dd} -D iot


#写创建备份日志
echo "${dd} create tdengine full dupm" >> $backup_dir/log.txt


#找出需要删除的备份
delfile=`ls -ld -crt ${backup_dir}/*/ | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -ld -crt ${backup_dir}/*/ | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm -rf $delfile
  #写删除文件日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi

给脚本,添加执行权限

chmod u+x taos_full_dump.sh

增量备份

增量命令如下:

/usr/local/bin/taosdump  --user=root -plong123456 -o /opt/TdengineBackup/2023-07-23 -D iot  -S 1690041600000 -E 1690128000000

增量备份脚本如下:

vim taos_incre_dump.sh

内容如下:

#!/bin/bash

#备份保存路径
backup_dir=/opt/TdengineBackup/Incre

# 昨天凌晨
yesterday=`date -d "-1 day" +"%Y-%m-%d"`
yesSecond=`date -d "$yesterday 00:00:00" +%s`
yesMs=$(($yesSecond*1000)) #将current转换为时间戳,精确到毫秒

# 今天凌晨
today=`date "+%Y-%m-%d"`
todaySecond=`date -d "$today 00:00:00" +%s`
todayMs=$((todaySecond*1000)) #将current转换为时间戳,精确到毫秒

#日期
dd=`date -d "-1 day" +"%Y-%m-%d"`

#如果文件夹不存在则创建
if [ ! -d $backup_dir/$dd ];
then     
    mkdir -p $backup_dir/$dd;
fi

cd $backup_dir/$dd
backuptime=`date "+%Y-%m-%d"-%H-%M-%S`

/usr/local/bin/taosdump  --user=root -plong123456  -o ${backup_dir}/${dd} -D iot  -S ${yesMs} -E ${todayMs}

#写创建备份日志
echo "${backuptime} create $backup_dir/$dd dupm from ${yesMs} to ${todayMs}  " >> $backup_dir/log.txt

添加执行权限

chmod u+x taos_incre_dump.sh

先测试上面的脚本,是否能正常执行,如果能正常执行,下面新增一个定时任务

crontab -e

设置定时备份脚本是,每天1点执行备份

0 1 */1 * * /opt/TdengineBackup/Incre/taos_incre_dump.sh

还原

命令:

taosdump --user=root -p -i /opt/TaosTools/2023-07-20-20-28-53

盱眙实时备份

全量备份

cd /mnt/sdc/hxhbbak/full

vim fullbak.sh

fullbak.sh的内容如下:

#!/bin/bash

#备份保存路径
backup_dir=/mnt/sdc/hxhbbak/full

# 昨天凌晨
startDay=`date -d "-365 day" +"%Y-%m-%d"`
startSecond=`date -d "$startDay 00:00:00" +%s`
startMs=$(($startSecond*1000)) #将current转换为时间戳,精确到毫秒

# 今天凌晨
today=`date "+%Y-%m-%d"`
todaySecond=`date -d "$today 00:00:00" +%s`
todayMs=$((todaySecond*1000)) #将current转换为时间戳,精确到毫秒

#日期
dd=`date -d "-1 day" +"%Y-%m-%d"`

#如果文件夹不存在则创建
if [ ! -d $backup_dir/$dd ];
then     
    mkdir -p $backup_dir/$dd;
fi

cd $backup_dir/$dd
backuptime=`date "+%Y-%m-%d"-%H-%M-%S`

/usr/local/bin/taosdump  --user=root -plong123456  -T 32 -o ${backup_dir}/${dd} -D iot2  -S ${startMs} -E ${todayMs}

#写创建备份日志
echo "${backuptime} create $backup_dir/$dd dupm from ${startMs} to ${todayMs}  " >> $backup_dir/log.txt
chmod u+x fullbak.sh

增量备份

cd /mnt/sdc/hxhbbak/incre

vim increbak.sh

increbak.sh的内容如下:

#!/bin/bash

#备份保存路径
backup_dir=/mnt/sdc/hxhbbak/incre

# 昨天凌晨
yesterday=`date -d "-1 day" +"%Y-%m-%d"`
yesSecond=`date -d "$yesterday 00:00:00" +%s`
yesMs=$(($yesSecond*1000)) #将current转换为时间戳,精确到毫秒

# 今天凌晨
today=`date "+%Y-%m-%d"`
todaySecond=`date -d "$today 00:00:00" +%s`
todayMs=$((todaySecond*1000)) #将current转换为时间戳,精确到毫秒

#日期
dd=`date -d "-1 day" +"%Y-%m-%d"`

#如果文件夹不存在则创建
if [ ! -d $backup_dir/$dd ];
then     
    mkdir -p $backup_dir/$dd;
fi

cd $backup_dir/$dd
backuptime=`date "+%Y-%m-%d"-%H-%M-%S`

/usr/local/bin/taosdump  --user=root -plong123456 -T 32 -o ${backup_dir}/${dd} -D iot2  -S ${yesMs} -E ${todayMs}

#写创建备份日志
echo "${backuptime} create $backup_dir/$dd dupm from ${yesMs} to ${todayMs}  " >> $backup_dir/log.txt
chmod u+x increbak.sh 

先测试上面的脚本,是否能正常执行,如果能正常执行,下面新增一个定时任务

crontab -e

设置定时备份脚本是,每天1点执行备份

0 1 */1 * * /mnt/sdc/hxhbbak/incre/increbak.sh

全量备份并自动删除过期文件

cd /mnt/sdc/hxhbbak/full

vim fullbak.sh

#!/bin/bash

#备份保存路径
backup_dir=/mnt/sdc/hxhbbak/full
number=1
# 昨天凌晨
startDay=`date -d "-1095 day" +"%Y-%m-%d"`
startSecond=`date -d "$startDay 00:00:00" +%s`
startMs=$(($startSecond*1000)) #将current转换为时间戳,精确到毫秒

# 今天凌晨
today=`date "+%Y-%m-%d"`
todaySecond=`date -d "$today 00:00:00" +%s`
todayMs=$((todaySecond*1000)) #将current转换为时间戳,精确到毫秒

#日期
dd=`date -d "-1 day" +"%Y-%m-%d"`

#如果文件夹不存在则创建
if [ ! -d $backup_dir/$dd ];
then     
    mkdir -p $backup_dir/$dd;
fi

cd $backup_dir/$dd
backuptime=`date "+%Y-%m-%d"-%H-%M-%S`

/usr/local/bin/taosdump  --user=root -plong123456  -T 32 -o ${backup_dir}/${dd} -D iot2  -S ${startMs} -E ${todayMs}

#写创建备份日志
echo "${backuptime} create $backup_dir/$dd dupm from ${startMs} to ${todayMs}  " >> $backup_dir/log.txt

# 删除多余文件
#找出需要删除的备份
delfile=`ls -l -crt $backup_dir |grep ^d  | grep -v total | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir |grep ^d  | grep -v total | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm -rf $backup_dir/$delfile
  #写删除文件日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi

END_DATE_TIME=$(date)
echo $END_DATE_TIME >> $backup_dir/log.txt

配置定时任务:

0 1 * * 6   /mnt/sdc/hxhbbak/full/fullbak.sh

每周六1点,定时运行fullbak.sh脚本文件


评论