时序数据库 InfluxDB
创始人
2024-01-25 01:38:49

一、介绍

       InfluxDB 是一个时间序列数据库,GO 编写的,旨在处理高写入和查询负载。InfluxDB 旨在用作涉及大量时间戳数据的任何用例的后备存储,包括 DevOps 监控、应用程序指标、物联网传感器数据和实时分析。

特点:

  • 专门为时间序列数据编写的自定义高性能数据存储。TSM 引擎允许高速摄取和数据压缩
  • 完全用 Go 编写。它编译成一个没有外部依赖性的二进制文件。
  • 简单、高性能的写入和查询 HTTP API。
  • 插件支持其他数据摄取协议,例如 Graphite、collectd 和 OpenTSDB。
  • 专为轻松查询聚合数据而定制的类似 SQL 的表达查询语言。
  • 标签允许为系列建立索引以实现快速高效的查询。
  • 保留策略有效地自动使陈旧数据过期。
  • 连续查询自动计算聚合数据,使频繁查询更高效。

InfluxDB有三大特性: 
    Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)        
    Metrics(度量):你可以实时对大量数据进行计算 
    Eevents(事件):它支持任意的事件数据

InfluxDB 提供三种操作方式:

  1. 客户端命令行方式
  2. HTTP API 接口
  3. 各语言 API 库

InfluxDB 和传统数据库(如:MySQL)区别:

InfluxDB传统数据库中的概念
database数据库
measurement数据库中的表
points每个表里某个时刻的某个条件下的一个 field 的数据,因为体现在图表上就是一个点,于是将其称为 point。Point 由时间戳(time)、数据(field)、标签(tags)组成
series序列,所有在数据库中的数据,都需要通过图表来展示,而这个 series 表示这个表里面的数据,可以在图表上画成几条线。具体可以通过 SHOW SERIES FROM "表名" 进行查询
Retention policy数据保留策略,可以定义数据保留的时长,每个数据库可以有多个数据保留策略,但只能有一个默认策略

注意:​​point​​​由3部分组成​​time+fields+tags​​。

Point 属性传统数据库中的概念
time每行记录都有一列time,主索引,记录时间戳,单位纳秒,时区UTC(东八区减8小时)
fields普通列,key-value结构,value数据类型支持型(float、integer、string、boolean)
tags索引列,key-value结构,value数据类型只支持string

说明

  • 在插入新数据时,tag、field 和 time之间用空格分隔 。
  • fields和tags key名称严格区分大小写。

​fields数据类型:

类型备注
floatinfluxdb的fields默认是float浮点型
integer整型,insert语句如需写入field是整型,需在数值后面加个i
string字符串,insert语句如需写入field是字符串,需英文双引号包含数值
boolean布尔型,真可以用 t , T , true , True , TRUE表示;假可以用 f , F , false , False 或者 FALSE表示

注意

        在influxdb中,字段必须存在。因为字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型。

端口

  • 8083:Web admin 管理服务的端口, http://localhost:8083
  • 8086:HTTP API 的端口
  • 8088:集群端口 (目前还不是很清楚, 配置在全局的 bind-address,默认不配置就是开启的)

二、安装

docker pull influxdb:1.8.3
docker run -d -p 18083:8083 -p 18088:8088 -p 18086:8086 --name my_influxdb influxdb:1.8.3
docker container update --restart=always my_influxdb

可视化工具:

1、web界面 

2、influxDB Studio 

客户端为绿色版,下载解压打开即可。

下载地址:Releases · CymaticLabs/InfluxDBStudio

案例数据:

curl https://s3.amazonaws.com/noaa.water-database/NOAA_data.txt -o NOAA_data.txt 

导入数据: 

influx -import -path=NOAA_data.txt -precision=s -database=NOAA_water_database 

三、inflxudb保留字

 

四、基本语法

docker exec -it my_influxdb  bash
cd /etc/influxdb/
influx 

1、客户端操作

1. 数据库操作

# 查看所有数据库

show databases;

# 建库

create database dbname;

# 删库

drop database daname

# 切换使用数据库

use dbname

2. 数据表和数据操作

查看所有表

show measurements

数据中的时间字段默认显示的是一个纳秒时间戳,改成可读格式。时间默认是UTC时间

precision rfc3339; # 之后再查询,时间就是rfc3339标准格式 
# 或可以在连接数据库的时候,直接带该参数
influx -precision rfc3339

查看一个measurement中所有的tag key

show tag keys

 查看一个measurement中所有的field key

show field keys

查看一个measurement中所有的保存策略(可以有多个,一个标识为default)

 show retention policies;

插入数据

        标准格式,注意在写数据的时候如果不添加时间戳,系统会默认添加一个时间。InfluxDB 中没有显式的新建表的语句,只能通过 insert 数据的方式来建立新表。

insert [,=...] =[,=...] [unix-nano-timestamp]insert 表名,tags fileds;

#插入fields,和tags.

insert student,a=1,b=2,c=3 name="sa",age=12,emial="xxx@163.com";
#只插入​​fields​​​,可以没有​​tags
insert student name="sa",age=12,emial="xxx@163.com";

删表

drop measurement student

 查询 

SELECT field keys [time | tag kyes | * ] FROM measurements WHERE conditions GROUP BY [tag keys | time] ORDER BY time [asc | desc] LIMIT number [OFFSET number]

  1. SELECT​​后面查询显示字段​必须至少有一个​​field key​​​,否则会抛异常​​ERR: at least 1 non-time field must be queried​​​。还可显示​​tag keys​​​、​​time​​​,或者​​*​​显示所有字段。
  2. ​​FROM​​​查询数据来源一个或者多个​​measurement​​。
  3. ​​WHERE​​​查询条件可为​​tag keys​​​和​​time​​​,​​field keys​​​ 也可作为查询条件但是不常用,因为不是索引,查询效率比较低。​​tag keys​​​条件操作符支持​​=、!=、<>、正则​​​,​​field keys​​​支持​​=、!=、<>、>、>=、<、<=、正则​​。
  4. ​​GROUP BY​​​只能对​​tag keys​​​和​​time​​​进行合分组,可以多字段排序,如​​group by tag1,tag2,time​​​,也可一个​​*​​​对所有的​​tag​​​进行分组聚合(不包括​​time​​)。
  5. ​​ORDER BY​​​只能对​​time​​​进行排序,​​asc​​​升序,​​desc​​降序。
  6. ​​LIMIT​​​分页,​​LIMIT​​​后面的数字是查询显示多少条,​​OFFSET​​​后面数字代表偏移量(从0开始代表第一条),如​​limit 10 offset 10​​意思为从第11条开始往后10条。

正则 

#每个表输出一行(支持 Go 语言的正则表达式、支持类似于 MySQL 中的 limit 语句)

SELECT * FROM /.*/ LIMIT 1

limit

limit​​​可单独使用,也可配合​​offset​​​使用,​​offset​​偏移量的意思

select * from student limit 2;

排序

order by​​​ 只能对​​time​​​进行排序,​​asc​​​升序,​​desc​​降序。

select * from student  order by time desc;

分组

SELECT () FROM_clause WHERE GROUP BY time(time_interval,[)] 

(1)group by tag

select * from h2o_pH group by location limit 2

(2)group by time(1m) 

        对​​time​​​分组时并不是简单的​​group by time​​​,​​time​​​后面还需要加一个分组聚合的持续时间,如​​group by time(1m)​​。支持的持续时间单位有:

(3)fill(0)填充null
        可以看到​​values​​​结果集中有​​null​​​的情况,可在查询语句中加​​fill(0)​​​,遇到​​null​​​用​​0​​​来填充。​​fill()​​中只能填数字。

条件查询

select * from student where a='1' and age=12; # a字段是tag :字符串


select sum(age) as ageNums from student where time < now() group by a order by time desc;

格式化显示查询数据

format json
select * from student where a='1' and age=12;

模糊查询(正则表达式

# location名称中包含coyote的数据
select * from h2o_quality where location=~/.*coyote.*/ limit 10

没有in还有or

select * from h2o_pH where location='coyote_creek' or location='santa_monica' limit 4

from多表查询 

        多表查询,以时间进行连接,不存在的值用null填充。一般情况连接的两张表tag和field上有一定的联系和比较,毫不相干的两表连接查询没什么价值。

select * from h2o_feet,h2o_pH limit 1

注意:

1.field tag是关键字 如果字段名是这两个,则需要加上单引号。

2.tags​​​之间用逗号分隔,​​fields​​之间用逗号分隔,​​​tags​​和​​fields​​之间用空格分隔​。

3.tags​​​都是字符串类型,但是不用双引号括起来;​​fields​​中有字符串类型需要用​英文双引号​括起来,如果不用英文双引号,会报语法错误​​invalid boolean​​,会认为是无效的布尔值,因为布尔类型无需加双引号。

4.tags​​​中设置布尔值就是字符串,​​fields​​​中有布尔值,可用 ​​t , T , true , True , TRUE,f , F , false , False​​表示。

3. series 操作

        series 相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。

​​shard​​​主要由4部分组成​​Cache​​​、​​Wal​​​、​​Tsm file​​​、​​Compactor​​。

#series 表示这个表里面的数据,可以在图表上画成几条线,series 主要通过 tags 排列组合算出来。

show series from student;

4.Shard 

        shard 在 InfluxDB 中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。

        如果创建一个新的 retention policy 设置数据的保留时间为 1 天,则单个 shard 所存储数据的时间间隔为 1 小时,超过1个小时的数据会被存放到下一个 shard 中。

5. 用户操作

# 显示用户
SHOW USERS
# 创建用户
CREATE USER "username" WITH PASSWORD 'password'
# 创建管理员权限的用户 

#influxdb 的权限设置比较简单,只有读、写、ALL 几种。
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES
# 删除用户
DROP USER "username"

2、API操作

状态码

  • 2xx:服务请求正常
  • 4xx:代表请求语法有问题
  • 5xx:服务端出问题,导致超时等故障

官方地址

3、Java操作

org.influxdbinfluxdb-java2.23
spring:application:name: spring-lean-influxdbinflux:url: http://192.168.56.22:18086user:password:database: test
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
public class InfluxDBConfig {@Value("${spring.influx.user}")public String userName;@Value("${spring.influx.password}")public String password;@Value("${spring.influx.url}")public String url;//数据库@Value("${spring.influx.database}")public String database;
}
import lombok.Builder;
import lombok.Data;
import org.influxdb.annotation.Column;
import org.influxdb.annotation.Measurement;
import org.influxdb.annotation.TimeColumn;import java.util.Date;@Builder
@Data
@Measurement(name = "t_log")
public class LogInfo {// Column中的name为measurement中的列名// 此外,需要注意InfluxDB中时间戳均是以UTC时保存,在保存以及提取过程中需要注意时区转换@Column(name = "time")private String time;// 注解中添加tag = true,表示当前字段内容为tag内容@Column(name = "module", tag = true)private String module;@Column(name = "level", tag = true)private String level;@Column(name = "device_id", tag = true)private String deviceId;@Column(name = "msg")private String msg;@TimeColumnprivate Date createTime;
}
import com.lean.influxdb.config.InfluxDBConfig;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.BatchPoints;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;@Service
public class InfluxDBService {@Autowiredprivate InfluxDBConfig influxDBConfig;@PostConstructpublic void initInfluxDb() {this.retentionPolicy = retentionPolicy == null || "".equals(retentionPolicy) ? "autogen" : retentionPolicy;this.influxDB = influxDbBuild();}//保留策略private String retentionPolicy;private InfluxDB influxDB;/*** 连接时序数据库;获得InfluxDB**/private InfluxDB influxDbBuild() {if (influxDB == null) {if(StringUtils.isEmpty(influxDBConfig.userName)){influxDB = InfluxDBFactory.connect(influxDBConfig.url);}else {influxDB = InfluxDBFactory.connect(influxDBConfig.url, influxDBConfig.userName, influxDBConfig.password);}influxDB.setDatabase(influxDBConfig.database);}return influxDB;}/*** 插入*/public void insertPoint(Point point) {influxDbBuild();influxDB.write(point);}/*** 插入* @param measurement 表* @param tags        标签* @param fields      字段*/public void insert(String measurement, Map tags, Map fields) {influxDbBuild();Point.Builder builder = Point.measurement(measurement);builder.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS);builder.tag(tags);builder.fields(fields);influxDB.write(influxDBConfig.database, "", builder.build());}/*** @param measurement* @param time* @param tags* @param fields* @return void* @desc 插入, 带时间time* @date 2021/3/27*/public void insert(String measurement, long time, Map tags, Map fields) {influxDbBuild();Point.Builder builder = Point.measurement(measurement);builder.time(time, TimeUnit.MILLISECONDS);builder.tag(tags);builder.fields(fields);influxDB.write(influxDBConfig.database, "", builder.build());}/*** @param measurement* @param time* @param tags* @param fields* @return void* @desc influxDB开启UDP功能, 默认端口:8089,默认数据库:udp,没提供代码传数据库功能接口* @date 2021/3/13*/public void insertUDP(String measurement, long time, Map tags, Map fields) {influxDbBuild();Point.Builder builder = Point.measurement(measurement);builder.time(time, TimeUnit.MILLISECONDS);builder.tag(tags);builder.fields(fields);int udpPort = 8089;influxDB.write(udpPort, builder.build());}/*** 查询** @param command 查询语句* @return*/public QueryResult query(String command) {influxDbBuild();return influxDB.query(new Query(command, influxDBConfig.database));}/*** @param queryResult* @desc 查询结果处理* @date 2021/5/12*/public List> queryResultProcess(QueryResult queryResult) {List> mapList = new ArrayList<>();List resultList = queryResult.getResults();//把查询出的结果集转换成对应的实体对象,聚合成listfor (QueryResult.Result query : resultList) {List seriesList = query.getSeries();if (seriesList != null && seriesList.size() != 0) {for (QueryResult.Series series : seriesList) {List columns = series.getColumns();String[] keys = columns.toArray(new String[columns.size()]);List> values = series.getValues();if (values != null && values.size() != 0) {for (List value : values) {Map map = new HashMap(keys.length);for (int i = 0; i < keys.length; i++) {map.put(keys[i], value.get(i));}mapList.add(map);}}}}}return mapList;}/*** @desc InfluxDB 查询 count总条数* @date 2021/4/8*/public long countResultProcess(QueryResult queryResult) {long count = 0;List> list = queryResultProcess(queryResult);if (list != null && list.size() != 0) {Map map = list.get(0);double num = (Double) map.get("count");count = new Double(num).longValue();}return count;}/*** 查询** @param dbName 创建数据库* @return*/public void createDB(String dbName) {influxDbBuild();influxDB.createDatabase(dbName);}/*** 批量写入测点** @param batchPoints*/public void batchInsert(BatchPoints batchPoints) {influxDbBuild();influxDB.write(batchPoints);}/*** 批量写入数据** @param database        数据库* @param retentionPolicy 保存策略* @param consistency     一致性* @param records         要保存的数据(调用BatchPoints.lineProtocol()可得到一条record)*/public void batchInsert(final String database, final String retentionPolicy,final InfluxDB.ConsistencyLevel consistency, final List records) {influxDbBuild();influxDB.write(database, retentionPolicy, consistency, records);}/*** @param consistency* @param records* @desc 批量写入数据* @date 2021/3/19*/public void batchInsert(final InfluxDB.ConsistencyLevel consistency, final List records) {influxDbBuild();influxDB.write(influxDBConfig.database, "", consistency, records);}} 
import com.lean.influxdb.entity.LogInfo;
import com.lean.influxdb.service.InfluxDBService;
import org.influxdb.dto.Point;
import org.influxdb.dto.QueryResult;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;@SpringBootTest
class SpringLeanInfluxdbApplicationTests {@Testvoid contextLoads() {}@Autowiredprivate InfluxDBService influxDBService;@Testpublic void test() {LogInfo logInfo = LogInfo.builder().level("1").module("log").deviceId("1").msg("消息").createTime(new Date()).build();Point point = Point.measurementByPOJO(logInfo.getClass()).addFieldsFromPOJO(logInfo).time(System.currentTimeMillis(), TimeUnit.MILLISECONDS).build();influxDBService.insertPoint(point);}@Testpublic void test1() {Integer pageSize = 15;Integer pageNum = 1;// InfluxDB支持分页查询,因此可以设置分页查询条件String pageQuery = " LIMIT " + pageSize + " OFFSET " + ((pageNum - 1) * pageSize);String queryCmd = "SELECT * FROM host_cpu_usage_total ORDER BY time DESC " + pageQuery;QueryResult queryResult = influxDBService.query(queryCmd);List> maps = influxDBService.queryResultProcess(queryResult);maps.stream().forEach(s->{s.forEach((k,v)->{System.out.printf("k",k);System.out.printf("v",v);});});List resultList = queryResult.getResults();System.out.println(resultList);}@Testpublic void testSave() {String measurement = "cpu_test";Map tags = new HashMap<>();tags.put("host_name", "host2");tags.put("cpu_core", "core0");Map fields = new HashMap<>();fields.put("cpu_usage", 0.54);fields.put("cpu_idle", 0.23);influxDBService.insert(measurement, tags, fields);}@Testpublic void testGetdata() {String command = "select * from cpu_test";QueryResult queryResult = influxDBService.query(command);List> result = influxDBService.queryResultProcess(queryResult);for (Map map : result) {System.out.println("time:" + map.get("time")+ " host_name:" + map.get("host_name")+ " cpu_core:" + map.get("cpu_core")+ " cpu_usage:" + map.get("host_name")+ " cpu_idle:" + map.get("host_name"));}}}

五、常用函数 

AggregationsSelectorsTransformations
COUNT()BOTTOM()CEILING()
DISTINCT()FIRST()DERIVATIVE()
INTEGRAL()LAST()DIFFERENCE()
MEAN()MAX()ELAPSED()
MEDIAN()MIN()FLOOR()
SPREAD()PERCENTILE()HISTOGRAM()
SUM()TOP()MOVING_AVERAGE()
NON_NEGATIVE_DERIVATIVE()
STDDEV()

更多查看官网:地址

六、存储策略

        InfluxDB 每秒可以处理成千上万条数据,要将这些数据全部保存下来会占用大量的存储空间,有时需要自动清理历史数据。

1.查看策略

         一个database可以有多个保留策略​​retention policy​​​,但是只能有一个默认​​retention policy​​

show retention policies on databaseName

2.创建策略

数据库新建都会分配一个默认的保留策略:

  • name​​,保留策略的名称。
  • ​​duration​​​,数据保留的持续时长,最小为​​1h​​​。如果设置为0,数据永久保存(官方默认RP),否则过期清理。它具有各种时间参数,比如:h(小时),w(星期)
  • ​​shardGroupDuration​​​,数据存储在​​shardGroup​​​的时间跨度。​​shardGroup​​​是​​influxdb​​​的一个逻辑存储结构,其下包含多个​​shard​​。
  • ​​replicaN​​,全称replication,复制因子,它决定在集群中存储多少个数据副本。inflxudb集群中跨N个数据节点复制数据,其中N就是复制因子。复制因子对单个节点实例不起作用,单机版默认是1。
  • ​​default​​,true为默认保留策略。

基本语法:

CREATE RETENTION POLICY ON DURATION REPLICATION [SHARD DURATION ] [DEFAULT]

  • retention_policy_name​​: 策略名。
  • ​​database_name​​: 数据库名(db必须存在)。
  • ​​duration​​: 数据保留时长。
  • ​​REPLICATION​​: 复制因子,单机版设置为1即可。
  • ​​SHARD DURATION​​​:设置​​shardGroupDuration​​​时长,表示每个​​shard group​​时间跨度时长。可不填,默认根据RP的duration计算。
  • ​​default​​: true为设置该RP为默认RP。

CREATE RETENTION POLICY "策略名称" ON "表名称" DURATION 30d REPLICATION 1 DEFAULT

3、修改策略

​ALTER RETENTION POLICY "策略名称" ON "表名称" DURATION 3w DEFAULT

4. 删除

DROP RETENTION POLICY "策略名称" ON "表名称"

七、目录与文件结构

InfluxDB 的数据存储主要有三个目录。默认情况下是 meta, wal 以及 data 三个目录。

  1. meta 用于存储数据库的一些元数据,meta 目录下有一个 meta.db 文件。
  2. wal 目录存放预写日志文件,以 .wal 结尾。
  3. data 目录存放实际存储的数据文件,以 .tsm 结尾。

​        shard​​​是​​influxdb​​​存储引擎​​TSM​​​的具体实现。​​TSM TREE​​​是专门为​​influxdb​​​构建的数据存储格式。与现有的​​B+ tree​​​或​​LSM tree​​​实现相比,​​TSM tree​​具有更好的压缩和更高的读写吞吐量。

        ​​shard group​​​是存储​​shard​​​的逻辑容器,每一个​​shard group​​​都有一个不重叠的时间跨度,可根据保留策略​​retention policy​​​的​​duration​​​换算而得。数据根据不同的时间跨度存储在不同的​​shard group​​中。

​​shard​​​主要由4部分组成​​Cache​​​、​​Wal​​​、​​Tsm file​​​、​​Compactor​​。

具体可以查看这个文章。

八、数据备份

        两种备份方式:1.db备份 2.元数据备份。元数据备份的备份是整个备份,不能拆分,而db数据的备份,完整的、增量的(从 RFC3339 格式的时间开始),或者针对特定的分片 ID。

1、备份和恢复DB数据

一、DB备份

基本语法:

通过​​influxd backup -h​​查看​​backup​​有哪些可选参数。

 Usage: influxd backup [options] PATH

-portable: 默认
-host # 需要备份的influxdb服务机器地址,可选,Defaults to 127.0.0.1:8088.
-database # 需要备份的db名称,可选,若没有指定,将备份所有数据库
-retention # 备份某个保留策略的数据,未指定,则备份所有rp的数据。
-shard # 需要备份的shard id,可选,若指定了备份shard,必须先选择rp
-start # 起始时间,日期必须采用 RFC3339格式(例如, 2015-12-24T08:12:23Z). 不能和-since一起使用
-end # 结束时间,日期必须采用 RFC3339格式(例如, 2015-12-24T08:12:23Z) 不能和-since一起使用
-since # 备份这个timestamp之后的数据,建议用-start 代替
-skip-errors # 可选,当备份shards时,跳过备份失败的shard,继续备份其他shard。

influxd backup -database

mydatabase是您要备份的数据库的名称,以及path-to-backup备份数据应该存储的位置。

注意: Metastore 备份也包含在每个数据库的备份中

案例:

1.备份所有数据库

influxd backup -portable /path/to/backup-directory

2.备份school库的所有数据。

influxd backup -portable -db school ~/tmp/influx_backup/

3.备份school 库昨天的数据。

influxd backup -portable -db school -start 2022-11-14T13:24:52.085243953Z -end 2020-11-15T13:24:52.085243953Z ~/tmp/influx_backup_yesterday/

4.只备份school ​​​的​​shard=2​​的数据

influxd backup -portable -db school -shard 2 ~/tmp/influx_backup_2/

5.远程备份(所有数据库)

influxd backup -portable -host 1192.168.56.11:8088 /path/to/backup-directory

二、DB恢复

使用该influxd restore实用程序将时间序列数据和元数据从 InfluxDB 备份还原到 InfluxDB。 

​influxd restore -h​​查看restore可选参数:

Usage: influxd restore -portable [options] PATH

Note: Restore using the '-portable' option consumes files in an improved Enterprise-compatible 
  format that includes a file manifest.

Options:
    -portable 
            
    -host  
            
    -db    
            从备份数据的哪个库恢复数据
    -newdb
            数据恢复到新库名称,若没有指定,选择-db 的名称。
            newdb不存在,恢复时会自动创建
    -rp    
            从备份数据的哪个rp恢复数据,指定了-rp,必须指定-db
    -newrp
            恢复数据新的rp名称,newrp必须存在。指定了-rp,未指定-newrp则使用-rp
    -shard
            需要恢复的shard,如果指定了'-db ' and '-rp ',必须-shard
    PATH
            备份数据文件list 

案例:

1.恢复​​~/tmp/influx_backup/​​​下​​school​​​库数据到新库​​new_school。

influxd restore -portable  -db school -newdb new_school  ~/tmp/influx_backup/

 2.恢复​​~/tmp/influx_backup/​​​下​​school​​​库,​​rp​​​为​​rp_3​​​数据到新库​​new_school1​​。

influxd restore -portable  -db school -rp rp_3 -newdb new_school1  ~/tmp/influx_backup/

3.恢复​​~/tmp/influx_backup/​​​下​​school​​​库,​​rp​​​为​​rp_3​​​,​​shard​​​为2的数据到新库​​new_school2​​​,并重命名​​rp​​​的名称为​​rp_3days​​。

influxd restore -portable  -db school -rp rp_3 -shard 2  -newdb new_school2   -newrp rp_3days ~/tmp/influx_backup/

注意:

二、备份和恢复元数据

1、备份元数据

influxd backup

备份元数据,没有任何其他参数,备份将只转移当前状态的系统元数据到​​path-to-backup​​​。​​path-to-backup​​为备份保存的目录,不存在会自动创建。

influxd backup tmp/mata_backup

 

 

2、恢复元数据

​基本语法:

influxd restore -metadir

参考来源: 

influxdb官方英文文档
influxdb中文文档
https://segmentfault.com/a/1190000012385313

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
公司优势怎么写比较好 如何描述... 我对企业竞争优势的理解和总结
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
乌拉是什么意思 乌托邦是什么意... 相信对俄罗斯有一定了解的朋友肯定不会对“乌拉”(Ура,读成“歪--屁--哎”的朋友请出门左转不送)...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...