TDengine 跨版本迁移实战
TDengine 3.0 已经退出了近一年,目前已经到了 3.2 版本。很遗憾的是 2.x 和 3.x 之间的数据文件不兼容。
如果向从 2.x 升级到 3.x 只能选择数据迁移的方式。
目前数据迁移有三种方法:
- 使用官方推荐工具
taosx
。 - 使用
taosdump
工具。 - 自己写程序。
迁移方式 | 优点 | 缺点 |
---|---|---|
taosx | 迁移速度快,不占用本地空间 | 只有企业版支持 |
taosdump | 社区版具备 | 占用大量本地空间,导出速度慢,大数据量导出数据不全 |
自己写程序 | 灵活、可定制 | 费人力 |
以下演示使用 Python 脚本跨版本迁移数据库,从 3.1 降级迁移到 2.6。
目录
- 源数据库
- 目标数据库
- 迁移步骤
- 1. 获取元数据信息
- 2. 创建目标数据库和超级表
- 3.配置迁移参数
- 4.运行迁移脚本
源数据库
属性 | 内容 |
---|---|
IP | 10.7.7.14 |
版本 | 3.1 |
数据库 | backtrade |
目标数据库
属性 | 内容 |
---|---|
IP | 192.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 提到的方法优化即可。
相关文章:

TDengine 跨版本迁移实战
TDengine 3.0 已经退出了近一年,目前已经到了 3.2 版本。很遗憾的是 2.x 和 3.x 之间的数据文件不兼容。 如果向从 2.x 升级到 3.x 只能选择数据迁移的方式。 目前数据迁移有三种方法: 使用官方推荐工具 taosx。使用 taosdump 工具。自己写程序。 迁移…...

FPGA设计时序约束八、others类约束之Set_Case_Analysis
目录 一、序言 二、Set Case Analysis 2.1 基本概念 2.2 设置界面 2.3 命令语法 2.4 命令示例 三、工程示例 四、参考资料 一、序言 在Vivado的时序约束窗口中,存在一类特殊的约束,划分在others目录下,可用于设置忽略或修改默认的时序…...

xftp连接wsl2
在WSL中默认是没有安装OpenSSH,需要自己安装。 安装 sudo apt update sudo apt install openssh-server检查是否安装成功 ssh -V配置ssh sudo vim /etc/ssh/ssh_config设置端口 Port 22启动ssh服务 sudo service ssh startxftp连接 主机地址:127.…...

Cross-View Transformers for Real-Time Map-View Semantic Segmentation 论文阅读
论文链接 Cross-View Transformers for Real-Time Map-View Semantic Segmentation 0. Abstract 提出了 Cross-View Transformers ,一种基于注意力的高效模型,用于来自多个摄像机的地图视图语义分割使用相机感知的跨视图注意机制隐式学习从单个相机视…...

MySQL InnoDB 引擎底层解析(一)
6. InnoDB 引擎底层解析 MySQL 对于我们来说还是一个黑盒,我们只负责使用客户端发送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的?MySQL 是以什么方式来访问的这些数据?这些问题我们统统不知…...

redis安装(Windows和linux)
如何实现Redis安装与使用的详细教程 Redis 简介 Redis是一个使用C语言编写的开源、高性能、非关系型的键值对存储数据库。它支持多种数据结构,包括字符串、列表、集合、有序集合、哈希表等。Redis的内存操作能力极强,其读写性能非常优秀,且…...

【LeetCode刷题-树】--1367.二叉树中的链表
1367.二叉树中的链表 方法:枚举 枚举二叉树中的每个节点为起点往下的路径是否与链表相匹配的路径,为了判断是否匹配设计了一个递归函数dfs(root,head),其中root表示当前匹配到的二叉树节点,head表示当前匹配到的链表节点,整个函数…...

【嵌入式 – GD32开发实战指南(ARM版本)】第2部分 外设篇 - 第3章 温度传感器DS18B20
1 理论分析 1.1 DS18B20概述 DS18B20 是 DALLAS 最新单线数字温度传感器,新的"一线器件"体积更小、适用电压更宽、更经济。Dallas 半导体公司的数字化温度传感器 DS1820 是世界上第一片支持 "一线总线"接口的温度传感器。 DS18B20采用的单总线协议,也…...

基于spring gateway 的静态资源缓存实现
由于子项目比较多,子项目都是通过嵌套的方式实现的。就会导致子页面加载比较慢,影响客户体验 实现思路(AI搜的--!): 1、通过spring boot缓存实现静态资源缓存 2、在gateway过滤器,对静态资源进行缓存 直接上代码&a…...

SDUT OJ《算法分析与设计》搜索算法
A - 子集和问题 Description 子集和问题的一个实例为〈S,t〉。其中,S{ x1 , x2 ,…,xn }是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得: 。 试设计一个解子…...

【NI-DAQmx入门】校准
1.设备定期校准的理由 随着时间的推移电子器件的特性会发生自然漂移,可能会导致测量结果的不准确性。防止出现良品和差品筛选出错的情况满足行业国际标准降低设备出现故障的风险使测量结果更具备参考性 2.查找NI设备的校准间隔。 定期校准会使DAQ设备的精度保持在…...

C语言链表
head.h typedef struct Node_s{int data; //数据域struct Node_s *pNext; //指针域 } Node_t, *pNode_t;void headInsert(pNode_t *ppHead, pNode_t *ppTail, int data); void print(pNode_t pHead); void tailInsert(pNode_t *ppHead, pNode_t *ppTail, int data); void sort…...

LabVIEW进行MQTT通信及数据解析
需求:一般通过串口的方式进行数据的解析,但有时候硬件的限制,没法预留串口,那么如何通过网络的方式特别是MQTT数据的通信及解析 解决方式: 1.MQTT通信控件: 参考开源的mqtt-LabVIEW https://github.com…...

基于DOTween插件实现金币飞行到指定位置功能
文章目录 前言一、DOTween是什么?二、使用步骤1.导入DOTween插件在Unity官方插件商店找到DOTween插件导入DOTween插件启用DOTween插件 2.代码逻辑金币飞行代码控制飞行效果代码 3.物体配置1.物体上装配CoinEffect脚本2.在金币预制体上装配FlyControl脚本 三、效果展…...

python-opencv 培训课程作业
python-opencv 培训课程作业 作业一: 第一步:读取 res 下面的 flower.jpg,读取彩图,并用 opencv 展示 第二步:彩图 -> 灰度图 第三步:反转图像:最大图像灰度值减去原图像,即可得…...

【Go入门】并发
【Go入门】并发 有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而Go从语言层面就支持了并行。 goroutine goroutine是Go并行设计的核心。goroutine说到底其实就是协程,…...

Java虚拟机运行时数据区结构详解
Java虚拟机运行时数据区结构如图所示 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 多线程切换时,为了能恢复到正确的执行位置,每条线程…...

华为OD机试 - 转盘寿司(Java JS Python C)
目录 题目描述 输入描述 输出描述 用例 题目解析 JS算法源码 Java算法源码...

【ATTCK】MITRE Caldera-emu插件
CALDERA是一个由python语言编写的红蓝对抗工具(攻击模拟工具)。它是MITRE公司发起的一个研究项目,该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的,能够较真实地APT攻击行为模式。 通过CALDERA工具,安全…...

23111709[含文档+PPT+源码等]计算机毕业设计基于Spring Boot智能无人仓库管理-进销存储
文章目录 **软件开发环境及开发工具:****功能介绍:****论文截图:****数据库:****实现:****代码片段:** 编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 软件开发环境及…...

SDUT OJ《算法分析与设计》贪心算法
A - 汽车加油问题 Description 一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。 对于给定的n和k个加油站位置,计算最少加油次数。 I…...

金融业务系统: Service Mesh用于安全微服务集成
随着云计算的不断演进,微服务架构变得日益复杂。为了有效地管理这种复杂性,人们开始采用服务网格。在本文中,我们将解释什么是Service Mesh,为什么它对现代云架构至关重要,以及它是如何解决开发人员今天面临的一些最紧…...

Linux下快速确定目标服务器支持哪些协议和密码套件
实现原理是利用TLS协议的特点和握手过程来进行测试和解析响应来确定目标服务器支持哪些TLS协议和密码套件。 在TLS握手过程中,客户端和服务器会协商并使用相同的TLS协议版本和密码套件来进行通信。通过发送特定的握手请求并分析响应,可以确定目标服务器…...

LeetCode100122. Separate Black and White Balls
文章目录 一、题目二、题解 一、题目 There are n balls on a table, each ball has a color black or white. You are given a 0-indexed binary string s of length n, where 1 and 0 represent black and white balls, respectively. In each step, you can choose two a…...

系列二十六、idea安装javap -c
一、概述 javap -c是一个能够将.java文件反编译为.class文件的指令,例如我在idea中编写了一个Car.java文件,我想看看这个类被编译后长什么样的,就可以使用该指令进行查看。 二、配置 2.1、 Java Bytecode Decompiler File>Settings>Pl…...

nginx 如何根据IP做限流,以及 nginx 直接返回 json 格式数据
Nginx 限流配置 Nginx是如何限流的。随着业务的扩散,系统并发越来越高时,有三样利器用来保护系统,分别是缓存、降级和限流。 随着业务的扩散,系统并发越来越高时,有三样利器用来保护系统,分别是缓存、降…...

C语言链式栈
stack.h typedef struct Node_s {int data;struct Node_s *pNext; } Node_t, *pNode_t;typedef struct Stack_s {pNode_t pHead;//栈顶指针,指向了链表的第一个结点int size;//栈的元素个数 } Stack_t, *pStack_t;void init(pStack_t pStack); void push(pStack_t …...

【Go入门】 Go的http包详解
【Go入门】 Go的http包详解 前面小节介绍了Go怎么样实现了Web工作模式的一个流程,这一小节,我们将详细地解剖一下http包,看它到底是怎样实现整个过程的。 Go的http有两个核心功能:Conn、ServeMux Conn的goroutine 与我们一般编…...

解决k8s node节点报错: Failed to watch *v1.Secret: unknown
现象: 这个现象是发生在k8s集群证书过期,重新续签证书以后。 记得master节点的/etc/kubernetes/kubelet.conf文件已经复制到node节点了。 但是为什么还是报这个错,然后运行证书检查命令看一下: 看样子是差/etc/kubernetes/pki/…...

日志维护库:loguru
在复杂的项目中,了解程序的运行状态变得至关重要。在这个过程中,日志记录(logging)成为我们追踪、调试和了解代码执行的不可或缺的工具。在python语言中常用logging日志库,但是logging日志库使用相对繁琐,在…...