当前位置: 首页 > news >正文

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。

目录

    • 源数据库
    • 目标数据库
    • 迁移步骤
      • 1. 获取元数据信息
      • 2. 创建目标数据库和超级表
      • 3.配置迁移参数
      • 4.运行迁移脚本

源数据库

属性内容
IP10.7.7.14
版本3.1
数据库backtrade

目标数据库

属性内容
IP192.168.2.125
版本2.6
数据库backtrade

迁移步骤

1. 获取元数据信息

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


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)

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 的建库语句发生了变化,跨版本迁移需要修改建库语句。
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.配置迁移参数

{"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.运行迁移脚本

python3 datac_com23.py

脚本使用说明

  • python3 datac_com23.py -h 查看文件帮助内容
  • python3 datac_com23.py -f tbfile 从 tbfile 文件读取迁移列表(只限子表),默认会从数据库查询所有表。
  • python3 datac_com23.py -p 时间多进程方式,默认为多线程
  • 如果表不存在,会自动创建。
[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 提到的方法优化即可。

相关文章:

  • lambda表达式c++
  • php mysql 如何处理查询中存在正则特殊字符的查询
  • 十、Linux运行级别
  • 常见的SQL语句及函数
  • 线程的三种创建方式
  • GitHub如何删除仓库
  • 数据分析—将txt文件转为csv文件;将csv文件转为xls文件
  • 04 后端增删改查【小白入门SpringBoot + Vue3】
  • 《Effective C++》条款23
  • 基于STC12C5A60S2系列1T 8051单片机的模数芯片ADC0832实现模数转换应用
  • adb手机调试常用命令
  • linux运行java程序
  • 飞书开发学习笔记(七)-添加机器人及发送webhook消息
  • 前端调试只会console.log()?
  • 416. 分割等和子集问题(动态规划)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • SegmentFault for Android 3.0 发布
  • “大数据应用场景”之隔壁老王(连载四)
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • ES学习笔记(12)--Symbol
  • Fabric架构演变之路
  • flutter的key在widget list的作用以及必要性
  • httpie使用详解
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript 奇技淫巧
  • JavaScript新鲜事·第5期
  • linux学习笔记
  • pdf文件如何在线转换为jpg图片
  • SpiderData 2019年2月13日 DApp数据排行榜
  • spring-boot List转Page
  • Terraform入门 - 3. 变更基础设施
  • text-decoration与color属性
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Vue2.x学习三:事件处理生命周期钩子
  • 代理模式
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 追踪解析 FutureTask 源码
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 飞书APP集成平台-数字化落地
  • #在 README.md 中生成项目目录结构
  • (1)常见O(n^2)排序算法解析
  • (4)logging(日志模块)
  • (4.10~4.16)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (实战篇)如何缓存数据
  • (转)一些感悟
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .gitignore文件_Git:.gitignore
  • .Mobi域名介绍
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net(C#)中String.Format如何使用
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)