TDEngine - taosdump的安装与使用实战


1


回到目录  回到末尾

一、taosdump简介

TDEngine官网 - 参考手册:taosdump

  taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序。
  taosdump 可以用数据库、超级表或普通表作为逻辑数据单元进行备份,也可以对数据库、超级 表和普通表中指定时间段内的数据记录进行备份。使用时可以指定数据备份的目录路径,如果 不指定位置,taosdump 默认会将数据备份到当前目录。
  如果指定的位置已经有数据文件,taosdump 会提示用户并立即退出,避免数据被覆盖。这意味着同一路径只能被用于一次备份。 如果看到相关提示,请小心操作。
  taosdump 是一个逻辑备份工具,它不应被用于备份任何原始数据、环境设置、 硬件信息、服务端配置或集群的拓扑结构。taosdump 使用 Apache AVRO 作为数据文件格式来存储备份数据。

回到目录  回到末尾

二、下载

  taosTools工具包,包含备份taosdump和taosBenchmark工具,不能单独使用,需要先安装客户端和服务端。客户端和服务端安装参考链接:TDEngine3.0环境安装及配置
  taosTools下载链接:TDEngine官网 - taosTools发布历史页面

tips:
1、下载的版本最好与实际安装的TDEngine Server版本对应,实际的安装包后缀与server的后缀部不是一致的
2、server 2.0版本之后的建议下载1.4.5之后版本
3、如果安装之后,taos服务可以正常启动,但是运行taosdump时异常:缺少.so文件,大概率是因为版本不匹配,建议更换taostools版本。

  我这边实战匹配过的版本如下示例:

tdenger servertaostoools
2.4.0.161.4.5
2.6.0.322.2.4
3.0.4.22.2.4
3.3.2.02.5.2

  因为我这边安装的TDEngine Server版本是3.4.0.2,第一次匹配安装的taostools版本为2.1.3,该版本数据导入时是可以的,但是数据导出时会报异常(【点击查看异常信息及解决方案】),然后升级到2.2.4版本后就可以正常导出了。所以后面本文的截图部分是2.1.3下的安装信息,部分是2.2.4的安装信息,不影响整体安装流程的部分图片没有修订。

server安装参考,对应下载的taostools版本为:taosTools-2.2.4-Linux-x64.tar.gz
1

  注意:最好不要在同一个系统上,同时使用rpm 、tar 、 deb安装。如果服务端用的是.tar.gz形式安装,客户端和taostools最好也用.tar.gz形式安装。

回到目录  回到末尾

三、安装

3.1 tar方式安装

1.创建目录,并将下载的文件传输至目录:

mkdir /home/tdengine
  1. 解压缩:tar -zxvf taosTools-2.2.4-Linux-x64.tar.gz
    查看加压缩后的目录:
#查看解压缩后的目录
ls
#进入解压缩后的目录
 cd taosTools-2.2.4
#查看目录下的文件内容
ls

1
3.执行安装命令:./install-taostools.sh

卸载命令:./uninstall-taostools.sh

1
安装成功后,进入taos shell命令查看安装是否成功。

回到目录  回到末尾

3.2 rpm方式安装

执行命令:

#命令·
 rpm -ivh rpm文件位置及名称.rpm
 #示例
 rpm -ivh /home/soft/taosTools-2.2.4-Linux-x64-comp3.rpm

回到目录  回到末尾

四、taosdump数据备份与恢复

4.1 taosdump主要参数

  taosdump 的导出行为的本质其实是使用 SQL 进行查询,将数据压缩后输出到本地,导入行为则是通过 STMT 接口再把导出的数据导入新的环境。因此,能够顺利完成数据导出的用户,应尽量拥有如下几个特征:
(1)拥有足够磁盘空间,建议需要至少留出 du -sh $dataDir/vnode --exclude=‘wal’ 大小的 3 倍空间(多多益善)。但如果是按照库/表为单位分批导出,或者指定时间范围导出的话,就比较灵活了。
(2)数据库日常使用负载不高,在大量导出 SQL 执行时,数据库仍有充足资源可以保障正常生产使用。
(3)待迁移的数据为测试环境不需担心影响业务,或者生产环境的业务间歇期足够完成数据的导出。
  只要磁盘空间充足,时间充足,就可以完成导出操作。导入则相对简单,没有额外需求,按照正常的数据库部署思路即可。

taosdump主要参数
-o:指定输出文件的路径。文件会自动生成。一个dbs.sql文件,导出数据库、超级表;若干个XXX_tables.N.sql文件,文件名的规则:XXX是数据库名称,N是数字,从0开始递增
-u:用户名。
-p:密码。
-A:指示导出所有数据库的数据。
-D:表示指定数据库。
-i:表示输入目录。
-s:表示导出schema。
-t:指定导入到一个文件的表的个数。该参数可以控制输出文件的大小。(网上很多博客里面都有记录这个参数,但是好像taosdump已经不用这个参数了)
-B:指定一条import语句中包含记录的条数。注意:不要让sql语句超过64k,否则后续导入会出错。该参数为了后续导入时,提高导入速率。
-T: 指定导出数据时,启动的线程数。建议设置成机器上core的2倍。

可以通过 命令 taosdump --help 获取参数信息

回到目录  回到末尾

4.2 taosdump数据导出(备份)

# 以tar形式安装的,需要先进入taostools安装目录,rpm方式安装的这步骤可以忽略
cd 安装目录
# 执行导出命令
 taosdump -o <导出存放目录>  -D 需要导出的数据库

1.创建导出目录

#创建存放数据总目录
mkdir /home/tdengine/taosdump
#创建本次导出存放目录
mkdir /home/tdengine/taosdump/data20230602
#进入存放目录
cd /home/tdengine/taosdump/data20230602

2.执行导出命令:
(1)进入taostool的安装目录 - rpm方式安装的这步骤可以忽略

#进入taostool的安装目录 - 
cd /home/tdengine/taosTools-2.2.4
#查看该目录下是否有bin目录
ls

1
(2)执行命令导出:

 #执行命令导出 - 指定数据库及时间范围
 taosdump -o /home/backupdatas/tljddatan2023.4.20-4.30/ -D tljd_datan -S 2023-04-20T00:00:00Z -E 2023-05-01T00:00:00Z

2

如果是通过rpm形式安装的taostools可以在任意目录下执行taosdump命令,不需要进入安装目录,格式示例:taosdump -o /taosdump/data20230602/ -A
1

3.查看导出的文件:

#进入刚指定的导出目录
cd  /home/backupdatas/tljddatan2023.4.20-4.30
#查看是否已存在备份文件
ls

1

回到目录  回到末尾

4.3 taosdump数据导入(数据恢复)

# 以tar形式安装的,需要先进入taostools安装目录,rpm方式安装的这步骤可以忽略
cd 安装目录
# 执行导入命令
 taosdump -i <导入的数据存放目录> 
  1. 进入taostools安装目录: - rpm方式安装的这步骤可以忽略
 cd /home/tdengine/taosTools-2.2.4
  1. 执行命令:taosdump -i <data dir>
#如:
taosdump -i /home/tdengine/taosdump/data20230602/

1

回到目录  回到末尾

五、不同版本的数据迁移

参考链接:如何把数据从 TDengine 2.x 迁移到 3.x ?
参考链接:如何把数据从 TDengine 2.x 迁移到 3.x ?
迁移背景:
1、数据导出:将TDEngine2.4.0.16中数据通过taostools.1.4.5中的taosdump工具将数据导出。
2、数据导入:在TDEngine3.0.4.2中通过taostools.2.1.3中的taosdump工具将数据导入。

5.1 问题:报错- create database 语句不一致

导入时报错:create database 语句不一致
1
对别导出的dbs.sql中数据库的创建语句,和TDEngine3.0中的数据创建语句:

#查看数据库创建语句
SHOW CREATE DATABASE  数据库名称  \G;

对比两边的创建语句,发现语句不相同:
1

5.2 解决:修改导出的dbs.sql

 修改导出的dbs.sql中的create database语句,删除create database语句中默认的参数设置,只保留需要特别设置的属性。

CREATE DATABASE IF NOT EXISTS 库名称  [KEEP 保留时间][..其他必要设置];

比如我的数据库需要设置保留天数1825天(5年),其他的参数不需要特别注意,将语句修改为:

CREATE DATABASE IF NOT EXISTS test KEEP 1825d;

修改前的2.0语句为:
1
修改后的语句为:
·
再执行导入:

./bin/taosdump -i /home/tdengine/taosdump/datatest/

这一次成功了:
1

tips:
如果你还出现其他的错误,根据提示,对比2.0和3.0版本中的语句差异,调整sql文件。

回到目录  回到末尾

六、卸载

TDEngine彻底卸载 - taostools工具卸载

七、异常 - error in ‘taosdump:malloc’


1
如果在数据导入或导出过程中,遇到上图所示的问题,解决步骤如下:

  1. 先看导出目录下的内存是否足够,不够的话,换其他目录导出
  2. 如果在内存充足的情况下,出现上述问题那么可能是taostools版本不对,不能适应数据导出或导入,建议升级到高版本重试。

回到目录  回到末尾

八、centos脚本实现tdengine的周期性数据备份

  1. 创建文件夹,执行命令:
mkdir -p  /home/shell/log
cd /home/shell
  1. 创建脚本文件,执行命令:
touch backup.sh
chmod +777 backup.sh
  1. 编辑脚本,执行命令:vi backup.sh
    输入文件内容:
#!/bin/bash  
export PATH=$PATH:/sbin:/usr/sbin
export LC_TIME=en_US.UTF-8
export TZ=Asia/Shanghai  # 设置时区为上海

# 日志文件不存在,创建文件;大于1M,清空文件
logfile="/home/shell/log/backup.log"
if [ ! -f "$logfile" ]; then
    touch "$logfile"
else
    if [ $(stat --format=%s "$logfile") -gt 1048576 ]; then
        > "$logfile"
    fi
fi

echo "------ 开始执行数据备份: $(date +"%Y-%m-%d %H:%M:%S") ------ " >> "$logfile"
> /home/shell/dump_result.txt
echo " 清空上次备份日志文件:dump_result.txt" >> "$logfile"

# 获取当前日期  
current_date=$(date +"%Y-%m-%d")    
current_y=$(date -d "$current_date" +"%Y")  
current_m=$(date -d "$current_date" +"%m")
current_d=$(date -d "$current_date" +"%d")
# 创建存储备份数据的文件夹路径  
backup_dir="/home/backup/date/${current_y}/${current_m}"  
# 检查文件夹是否存在,如果不存在则递归创建  
if [ ! -d "$backup_dir" ]; then   
   mkdir -p "$backup_dir"  
   echo " 成功创建文件夹:$backup_dir" >> "$logfile" 
fi  
# 对指定数据库,执行taosdump备份语句
databases=(
	gw_test
) 
prev_date=$(date -d "yesterday" +"%Y-%m-%d")  
for db in "${databases[@]}"; do  
    folder_name="${backup_dir}/${current_d}_${db}"  
    if [ ! -d "$folder_name" ]; then   
        mkdir -p "$folder_name"  
        echo " 成功为数据库$db创建文件夹:$folder_name" >> "$logfile" 
    else  
        echo " 数据库$db文件夹已存在:$folder_name" >> "$logfile"  
    fi  
    taosdump -u root -pAhjuxin_2024 -o $folder_name -D ${db} -S ${prev_date}T00:00:00Z -E $(date +"%Y-%m-%d")T00:00:00Z
    echo " 执行备份语句:taosdump -u root -pAhjuxin_2024 -o $folder_name -D ${db} -S ${prev_date}T00:00:00Z -E $(date +"%Y-%m-%d")T00:00:00Z" >> "$logfile"  
done
# 如果是月初,备份上个月整月的数据
if [ "$current_d" = "01" ]; then
	echo " 月初备份上个月整月的数据:" >> "$logfile" 
	prev_date=$(date -d "last month" +"%Y-%m-01") 
	backup_dir="/home/backup/month/$(date -d "last month" +"%Y%m")"
	for db in "${databases[@]}"; do  
	    folder_name="${backup_dir}/${db}"  
	    if [ ! -d "$folder_name" ]; then   
	        mkdir -p "$folder_name"  
	        echo " 成功为数据库$db创建文件夹:$folder_name" >> "$logfile" 
	    else  
	        echo " 数据库$db文件夹已存在:$folder_name" >> "$logfile"  
	    fi  
	    taosdump -u root -pAhjuxin_2024 -o $folder_name -D ${db} -S ${prev_date}T00:00:00Z -E $(date +"%Y-%m-%d")T00:00:00Z
	    echo " 执行备份语句:taosdump -u root -pAhjuxin_2024 -o $folder_name -D ${db} -S ${prev_date}T00:00:00Z -E $(date +"%Y-%m-%d")T00:00:00Z" >> "$logfile"  
	done
else 
   echo " 非月初,跳过月备份" >> "$logfile"  
fi
# 如果是年初,备份上年整年的数据
if [ "$current_d" -eq 01 ] && [ "$current_m" -eq 01 ]; then
echo " 年初备份上年整年的数据:" >> "$logfile" 
	prev_date=$(date -d "last year" +"%Y-01-01") 
	backup_dir="/home/backup/year/$(date -d "last year" +"%Y")"
	for db in "${databases[@]}"; do  
	    folder_name="${backup_dir}/${db}"  
	    if [ ! -d "$folder_name" ]; then   
	        mkdir -p "$folder_name"  
	        echo " 成功为数据库$db创建文件夹:$folder_name" >> "$logfile" 
	    else  
	        echo " 数据库$db文件夹已存在:$folder_name" >> "$logfile"  
	    fi  
	    taosdump -u root -pAhjuxin_2024 -o $folder_name -D ${db} -S ${prev_date}T00:00:00Z -E $(date +"%Y-%m-%d")T00:00:00Z
	    echo " 执行备份语句:taosdump -u root -pAhjuxin_2024 -o $folder_name -D ${db} -S ${prev_date}T00:00:00Z -E $(date +"%Y-%m-%d")T00:00:00Z" >> "$logfile"  
	done
else 
   echo " 非年初,跳过年备份" >> "$logfile"  
fi

echo "------ 数据备份执行完成: $(date +"%Y-%m-%d %H:%M:%S") ------ " >> "$logfile"

保存文件

  1. 测试文件是否能正常运行,执行命令:./bachup.sh
    1
    日志文件正常输出,且文件成功创建,数据成功导出。

  2. 新增调度任务,执行命令:crontab -e
    添加内容:05 00 * * * /home/shell/backup.sh
    2

九、 更多

### Ubuntu 上安装 TDengine 数据库 #### 使用预编译二进制包安装 对于希望快速部署的用户来说,可以采用官方提供的 Debian/Ubuntu 安装包来简化安装过程。通过 `dpkg` 命令可以直接从本地文件完成软件包的安装。 ```bash sudo dpkg -i tdengine-1.6.1.6.deb ``` 此方法适用于已经获取了合适版本 DEB 文件的情况[^2]。 #### 依赖环境准备 为了确保 TDengine 能够正常运行,在某些情况下可能还需要额外配置开发工具链以及 Java 开发套件: ```bash sudo apt-get update sudo apt-get install -y cmake build-essential sudo apt-get install openjdk-8-jdk sudo apt-get install maven ``` 这些命令用于更新系统并安装必要的构建工具和 JDK 版本,这一步骤特别重要当计划从源码编译最新特性时[^4]。 #### 编译安装 (可选) 如果想要获得最新的功能或是针对特定硬件优化,则可以从 GitHub 获取源代码,并按照以下步骤操作: 1. 下载并解压缩源代码至 `/third/TDengine-ver-2.0.5.0` 2. 创建并进入调试目录 `debug` 3. 执行 CMake 配置脚本以生成 Makefile 4. 运行 make 构建项目 ```bash tar zxvf TDengine-source-code.tar.gz -C /third/ cd /third/TDengine-ver-2.0.5.0 mkdir debug && cd debug cmake .. make ``` 这种方式适合高级用户或开发者测试新特性和修复潜在问题。 #### 启动服务 无论采取哪种方式安装完成后都需要启动 TDengine 的守护进程才能正常使用数据库: ```bash sudo service taosd start ``` 这条命令将会激活后台的服务程序使得客户端能够访问数据库实例[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值