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版本一致,最好的是同一天发布的。
Tdengine | TaosTools | |
---|---|---|
3.0.0 | 2.1.3 | |
3.0.3.2 | 2.4.11 | |
3.0.4.2 | 2.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脚本文件