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 提到的方法优化即可。

相关推荐
ltl13 小时前
向量混合检索与标量过滤:表达式、bitset 与选择度
数据库
lf132102713 小时前
用 JSON Schema 管装修节点记录:从照片台账到可校验工程数据
网络·数据库·人工智能·经验分享·物联网·json·智能家居
小此方13 小时前
Re:Linux系统篇(五十七)线程篇 · 十:基于环形缓冲的生产者消费者模型与信号量
linux·运维·驱动开发
fanged14 小时前
Linux的DD命令
linux·运维·服务器
roman_日积跬步-终至千里14 小时前
【资源控制】自助查询的智能路由
java·大数据·数据库
SelectDB14 小时前
无锡锡商银行 数据仓库演进:Apache Doris / SelectDB 的技术能力与实践
数据库
名不经传的养虾人14 小时前
从0到1:企业级AI项目迭代日记 Vol.87|记忆链路切换了,系统接管有了质量门
大数据·人工智能·ai编程·企业ai·多agent协作
GlobalInfo14 小时前
2026年显微外科手术机器人系统市场报告:市场规模、产业研究、十五五规划与发展趋势预测
大数据·人工智能·机器人
SelectDB14 小时前
雨润集团 统一实时数据仓库:Apache Doris / SelectDB 的技术能力与实践
数据库
Htr_14 小时前
Outcome 核心概念与实战应用指南
大数据·hadoop·apache