TSDB for InfluxDB®历史数据迁移方案

更新时间:

20261023日,TSDB for InfluxDB®将正式退市。为确保您的正常使用,请在退市之前尽快完成数据迁移。本文将为您详细介绍TSDB for InfluxDB®历史数据迁移方案。

重要

关于TSDB for InfluxDB®退市详情,请参见【通知】20261023日时序数据库 InfluxDB® 版退市

(推荐)迁移至Lindorm TSDB

云原生多模数据库 Lindorm时序引擎是一款高性能、低成本、稳定可靠的在线时序数据库引擎服务,提供高效读写、高压缩比存储、时序数据聚合计算、数据库内机器学习等能力。关于TSDB for InfluxDB®迁移至Lindorm TSDB的操作详情,请参见InfluxDB全量迁移至时序引擎

迁移至自建InfluxDB

前提条件

  • TSDB for InfluxDB®实例版本已升级为最新版(1.8.14)。

  • 已开通备份端口号:8088。

    您可以通过阿里云工单系统提交工单,开通备份端口号。

  • 需确保自建InfluxDBTSDB for InfluxDB®实例的地域、可用区、实例规格、专有网络以及虚拟交换机相同。

    本文以ECS环境为例,购买满足上述条件的ECS实例并安装V1.8.10版本的自建InfluxDB。详情请参见快速购买实例

您可以阅读InfluxDB官网文档备份与恢复章节了解迁移流程。

注意事项

  • 备份与恢复仅支持迁移历史数据,无法保证增量数据的迁移。因此,建议您将数据同时写入云TSDB for InfluxDB和自建InfluxDB后再迁移历史数据。

  • 备份期间会额外占用存储空间,确保有2倍存储数据量以上的存储空间

  • 若当前实例内存水位负载超过80%,请升配后再进行备份与迁移。

  • 按照Shard备份数据,备份需指定数据库、保留策略、Shard。

备份Backup

在已安装InfluxDBECS中执行如下命令。

influxd backup -portable \
  -host ts-xxx.influxdata.tsdb.aliyuncs.com:8088 \
  -db example_db \
  -rp example_rp \
  -shard 123 \
  /root/tmp/influx_backup

参数介绍:

  • host:TSDB for InfluxDB®实例的VPC网络地址。您可以登录TSDB控制台,在实例详情页面查看实例的VPC网络地址

  • -db:需要备份的数据库名称。您可以登录TSDB控制台,在实现数据库管理 > 数据库管理页面,查看数据库名称。

  • -rp:需要备份的保留策略名称。您可以登录TSDB控制台,在实现数据库管理 > 数据库管理页面,单击目标数据库操作列中的存储策略管理,查看保留策略名称。

  • -shard:需要备份的分片ID。可通过show shards命令查看分片ID。

  • 备份的目标目录。

恢复Restore

  1. 在已安装InfluxDBECS中,执行如下命令,将数据恢复至临时数据库。

    influxd restore -portable \
      -db example_db \
      -rp example_rp \
      -shard 123 \
      -newdb example_tmp_db \
      /root/tmp/influx_backup

    参数说明:

    • -db:备份的数据库名称。

    • -rp:备份的保留策略名称。

    • -shard:需要备份的分片ID。

    • newdb: 恢复的目标数据库。

    • 数据备份所在的目标目录。

  2. 使用InfluxQL从临时数据库中查询数据并写回至目标数据库中。

    SELECT * INTO "example_db"."example_rp".:MEASUREMENT FROM "example_tmp_db".autogen./.*/ GROUP BY *
  3. 删除临时数据库。

    DROP DATABASE "example_tmp_db"

迁移至其他数据库

注意事项

查询一定要添加Tag过滤条件和时间过滤条件,否则大查询会造成实例不稳定。

导出CSV文件

您可以使用Influx-cli 工具(1.X版本)执行查询,将查询结果导出成CSV文件。

influx -ssl \
  -host ts-xxx.influxdata.tsdb.aliyuncs.com \
  -port 8086 \
  -username "xxx" \
  -password "xxx" \
  -format "csv" \
  -precision ms \
  -database example_db \
  -execute "select * from sensor" | \
  > /root/tmp/ouput.csv

导出的CSV文件第一列为name列(代表measurement),若不需要该列则使用如下命令。

influx -ssl \
  -host ts-xxx.influxdata.tsdb.aliyuncs.com \
  -port 8086 \
  -username "xxx" \
  -password "xxx" \
  -format "csv" \
  -precision ms \
  -database example_db \
  -execute "select * from sensor" | \
  sed -r 's/^[^,]+,//' | \
  > /root/tmp/ouput.csv

导入至其他数据库

通过开源工具或写程序将CSV格式文件导入至其他数据库。示例如下。

示例1:导入至Lindorm TSDB

  1. 使用Influx-cli 工具(1.X版本)导出TSDB for InfluxDB®实例的数据。

    precision指定为msrfc3339,并去除measurement列。

    influx -ssl \
      -host ts-xxx.influxdata.tsdb.aliyuncs.com \
      -port 8086 \
      -username "xxx" \
      -password "xxx" \
      -format "csv" \
      -precision ms \
      -database example_db \
      -execute "select * from sensor" | \
      sed -r 's/^[^,]+,//' | \
      > /root/tmp/ouput.csv
  2. Lindorm TSDB上创建目标数据库和目标表(需提前创建所有字段)。

  3. 通过Lindorm-cli导入CSV文件至目标数据库的目标表中。

lindorm-cli -url jdbc:lindorm:tsdb:url=http://ld-xxx-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242 \
  -format=csv \
  -input /root/tmp/ouput.csv \
  -database example_db \
  -table example_table

示例2:导入至自建InfluxDB

  1. 下载以下工具。

  2. 使用 Influx-cli(1.X 版本)工具导出数据。

    influx -ssl \
      -host ts-xxx.influxdata.tsdb.aliyuncs.com \
      -port 8086 \
      -username "xxx" \
      -password "xxx" \
      -format "csv" \
      -database example_db \
      -execute "select * from sensor" | \
      > /root/tmp/ouput.csv
  3. 使用Influx-cli(2.X 版本)工具将CSV文件转换成行协议文件。详情请参见Write CSV data to InfluxDB

    influx write dryrun \
      --format csv \
      --header "name|measurement,time|dateTime,device_id|tag,humidity|long|0,region|tag,temperature|double|0.0" \
      --skipHeader=1 \
      -f /root/tmp/ouput.csv \
      > /root/tmp/ouput.line

    参数说明:

    header:格式为列名|数据类型|默认值,详情请参见header 格式。其中,时间类型可参考指定时间类型

  4. 将行协议文件写入自建的1.X 版本InfluxDB。