云InfluxDB数据迁出方案

更新时间:

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

重要

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

迁移方案选择

根据业务需求选择迁移方案:

  • 平迁需求时:推荐自建InfluxDB。

  • 大规模数据需使用分布式数据库时:

    • 时序监控场景:推荐云原生多模数据库Lindorm时序引擎。注意:由于Lindorm时序引擎暂不兼容InfluxQL查询语言,您的应用程序代码需要进行查询改造。如果您接受改造,我们推荐您迁移至该引擎。

    • 其他时序场景:可评估其他分布式时序数据库方案。

TSDB for InfluxDB迁移至自建InfluxDB

前提条件

  • TSDB for InfluxDB已升级为最新版(1.8.14)。

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

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

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

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

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

注意事项

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

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

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

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

  • 数据迁移采用按时间分片串行导入策略,即完成某一时间分片内整个 database 的全量数据迁移至目标库后,再启动下一个时间分片的迁移。

备份Backup

在自建InfluxDB所在的ECS中执行如下命令。

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. 在自建InfluxDB所在的ECS中,执行如下命令,将数据恢复至临时数据库。

    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"

TSDB for InfluxDB迁移至其他数据库(含Lindorm时序引擎)

注意事项

查询一定要添加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时序引擎

  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 版本)工具导出数据。

    有两点需要注意:

    1. 无需指定 precision。

    2. 保留measurement列。

      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。