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

相关推荐
_.Switch5 分钟前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410836 分钟前
文件系统和日志管理
linux·运维·服务器
JokerSZ.10 分钟前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
芯盾时代42 分钟前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方2 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘2 小时前
NFS服务器
运维·服务器
Ai 编码助手2 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
Json_181790144802 小时前
An In-depth Look into the 1688 Product Details Data API Interface
大数据·json
陈燚_重生之又为程序员2 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle2 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express