TDengine 跨版本迁移实战

TDengine 3.0 已经退出了近一年,目前已经到了 3.2 版本。很遗憾的是 2.x 和 3.x 之间的数据文件不兼容。

如果向从 2.x 升级到 3.x 只能选择数据迁移的方式。

目前数据迁移有三种方法:

  1. 使用官方推荐工具 taosx
  2. 使用 taosdump 工具。
  3. 自己写程序。
迁移方式 优点 缺点
taosx 迁移速度快,不占用本地空间 只有企业版支持
taosdump 社区版具备 占用大量本地空间,导出速度慢,大数据量导出数据不全
自己写程序 灵活、可定制 费人力

以下演示使用 Python 脚本跨版本迁移数据库,从 3.1 降级迁移到 2.6。

目录

源数据库

属性 内容
IP 10.7.7.14
版本 3.1
数据库 backtrade

目标数据库

属性 内容
IP 192.168.2.125
版本 2.6
数据库 backtrade

迁移步骤

1. 获取元数据信息

查询数据库和超级表的建库建表语句。

sql 复制代码
taos> show create database backtrade\G;
*************************** 1.row ***************************
       Database: backtrade
Create Database: CREATE DATABASE `backtrade` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 14400m WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 1 KEEP 5256000m,5256000m,5256000m PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 0 WAL_RETENTION_SIZE 0
Query OK, 1 row(s) in set (0.000398s)
sql 复制代码
taos> show stables;
          stable_name           |
=================================
 btdata                         |
Query OK, 1 row(s) in set (0.001156s)

taos> show create stable btdata\G;
*************************** 1.row ***************************
       Table: btdata
Create Table: CREATE STABLE `btdata` (`ts` TIMESTAMP, `profit` DOUBLE) TAGS (`fcode` VARCHAR(6), `fname` NCHAR(20))
Query OK, 1 row(s) in set (0.001251s)

2. 创建目标数据库和超级表

运行迁移脚本前需要先在目标端创建数据库和超级表。

  • 2.x 和 3.x 的建库语句发生了变化,跨版本迁移需要修改建库语句。
sql 复制代码
taos> CREATE DATABASE `backtrade` ;
Query OK, 0 of 0 row(s) in database (0.001749s)

taos> use backtrade;
Database changed.

taos> CREATE STABLE `btdata` (`ts` TIMESTAMP, `profit` DOUBLE) TAGS (`fcode` BINARY(6), `fname` NCHAR(20));
Query OK, 0 of 0 row(s) in database (0.001782s)

3.配置迁移参数

json 复制代码
{
    "exporUrl":"http://10.7.7.14:6041/rest/sql",
    "exportDBName":"backtrade",
    "exportUsername":"root",
    "exportPassword":"taosdata",
    "exportVersion":3,
    "importUrl":"http://192.168.2.125:6041/rest/sql",
    "importDBName":"backtrade",
    "importUsername":"root",
    "importPassword":"taosdata",
    "importVersion":2,
    "recodeOfPerSQL":1000,
    "tableonly":"false",
    "sqlheader":"select * from ",
    "startTime":943891200000,
    "endTime":1699939779000,
    "threadNum":4
}

参数说明:

  • exportUrl 源数据库Restful接口地址
  • exportDBName 源数据库名称
  • exportUsername 源数据库用户名
  • exportPassword 源数据库密码
  • exportVersion 源数据库版本,近支持2/3,用于判断Restful返回值
  • importUrl 目标库Restful接口地址
  • importDBName 目标库名称
  • importUSername 目标库用户名
  • imortPassword 目标库密码
  • importVersion 目标数据库版本,近支持2/3,用于判断Restful返回值
  • recodeOfPerSQL 单条SQL记录数,需要根据表结构调整,保证单条SQL不超过1MB
  • tableonly 是否只迁移表结构
  • sqlheader 数据查询SQL头,可通过此项定制迁移内容,比如说只迁移某几列数据
  • startTime 迁移数据起始实际
  • endTime 迁移数据中止时间
  • treadNum 并发线程/进程数量

注意:

  • 如果目标数据库版本是 2.x,那么最好先创建好所有表,再导入数据。2.x 建表很慢,并发建表会失败。
  • 如果目标数据库版本是 2.x,且 tableonly 设置为 true,那么 threadNum 应该设置为 1。

4.运行迁移脚本

bash 复制代码
python3 datac_com23.py

脚本使用说明

  • python3 datac_com23.py -h 查看文件帮助内容
  • python3 datac_com23.py -f tbfile 从 tbfile 文件读取迁移列表(只限子表),默认会从数据库查询所有表。
  • python3 datac_com23.py -p 时间多进程方式,默认为多线程
  • 如果表不存在,会自动创建。
bash 复制代码
[2023-11-15 12:08:04,440] dataC/multi_thread(62652/MainThread) INFO - --------------------begin------------------
[2023-11-15 12:08:04,454] dataC/export_table(62652/Thread_0) INFO - Table Name:t_688287, Select Rows:3
[2023-11-15 12:08:04,454] dataC/export_table(62652/Thread_3) INFO - Table Name:t_516770, Select Rows:3
[2023-11-15 12:08:04,454] dataC/export_table(62652/Thread_1) INFO - Table Name:t_118015, Select Rows:3
[2023-11-15 12:08:04,454] dataC/export_table(62652/Thread_2) INFO - Table Name:t_831445, Select Rows:3
[2023-11-15 12:08:04,492] dataC/export_table(62652/Thread_0) INFO - Create table t_688287 success.
[2023-11-15 12:08:04,494] dataC/export_table(62652/Thread_2) INFO - Create table t_831445 success.
[2023-11-15 12:08:04,494] dataC/export_table(62652/Thread_3) INFO - Create table t_516770 success.
[2023-11-15 12:08:04,495] dataC/export_table(62652/Thread_1) INFO - Create table t_118015 success.
......
[2023-11-15 12:08:30,738] dataC/export_table(62652/Thread_1) INFO - Create table t_128033 success.
[2023-11-15 12:08:30,750] dataC/multi_thread(62652/MainThread) INFO - --------------------end------------------
[2023-11-15 12:08:30,750] dataC/multi_thread(62652/MainThread) INFO - ##############################
[2023-11-15 12:08:30,750] dataC/multi_thread(62652/MainThread) INFO - ## 9038/9038 Tables  and 27395 Rows are proceed.
[2023-11-15 12:08:30,750] dataC/multi_thread(62652/MainThread) INFO - ## 9038 tables created.
[2023-11-15 12:08:30,754] dataC/multi_thread(62652/MainThread) INFO - ##############################

脚本内容见迁移脚本

如果看不到,可能还没有通过审核,等两天就好。

某些情况下,运行脚本会报超时错误,原因是脚本建立了大量连接,导致网络资源紧张。

按照 [Python学习笔记]Requests性能优化之Session 提到的方法优化即可。

相关推荐
博图光电20 小时前
博图机械臂:以智能精度,重塑多行业自动化新生态
运维·自动化
武子康21 小时前
大数据-133 ClickHouse 概念与基础|为什么快?列式 + 向量化 + MergeTree 对比
大数据·后端·nosql
夕小瑶21 小时前
Dexmal 原力灵机开源 Dexbotic:具身智能的“Transformers“库来了
大数据·人工智能
小安运维日记21 小时前
RHCA - DO374 | Day01:使用红帽Ansible自动化平台开发剧本
运维·服务器·云原生·自动化·云计算·ansible
想ai抽21 小时前
Flink的checkpoint interval与mini-batch什么区别?
大数据·flink·batch
字节跳动数据平台21 小时前
火山引擎推出Data Agent评测体系,并发布《2025数据智能体实践指南》
大数据
字节跳动数据平台21 小时前
火山引擎发布新产品用户研究Agent,并推出数据智能体评测体系
大数据
草明21 小时前
clickhouse 检查是否有删除语句在执行
数据库·clickhouse
在未来等你21 小时前
Kafka面试精讲 Day 29:版本升级与平滑迁移
大数据·分布式·面试·kafka·消息队列
风语者日志21 小时前
攻防世界—easyupload
数据库·web安全·ctf·小白入门