influxdb是什么
时序数据库是近几年一个新的概念,与传统的Mysql关系型数据库相比,它的最大的特点是:数据按照时间顺序存储。
InfluxDB是一个由InfluxData开发的开源时序型数据库。它由Go语言写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景,有三大特性
- 基于时间序列
- 可度量性
- 基于事件
在最新的DB-ENGINES排名给出的时间序列数据库的排名中,InfluxDB高居第一位
influxdb数据模型
database 代表含义:数据库
measurement 代表含义:数据库中的表
point 代表含义:表里面的一行数据,由时间戳(time)、数据(field)、标签(tags)组成
time 代表含义:每个数据记录时间,是数据库中的主索引(会自动生成)
fields 代表含义:各种记录值(没有索引的属性)
tags 代表含义: 各种有索引的属性
series 代表含义:所有在数据库中的数据,都需要通过图表来展示,表示表里面的数据,可以在图表上画成几条线,通过tags排列组合计算出来
如下图:temperature 就是measurement 代表一张表。每行代表一个 point internal extenal 是两个数据指标取值。tags代表取值产生的位置。
series 就是某种特定tag下的某个特定指标的时序取值集合。
influxdb数据存储架构
每个database 可以有多个RP(retention policy数据保存策略),但是只有一个默认策略。策略下按照时间段分为多个ShardGroup,每个ShardGroup存储一个时间段的数据。每个shardgroup下分多个shard来存储数据。
influxdb部署运行
解压安装包并重命名
[root@localhost ~]# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8_linux_amd64.tar.gz
[root@localhost ~]# tar -zvxf influxdb-1.7.8_linux_amd64.tar.gz
[root@localhost ~]# mv influxdb-1.7.8_linux_amd64 influx
创建 data log meta wal 四个目录如下
[root@localhost influx]# ll
drwxr-xr-x. 4 root root 34 9鏈 5 15:21 data
drwxr-xr-x. 4 root root 41 8鏈 21 2019 etc
-rw-r--r--. 1 root root 20862 9鏈 5 15:24 influxdb.conf
drwxr-xr-x. 2 root root 6 9鏈 5 15:00 log
drwxr-xr-x. 2 root root 21 9鏈 5 15:23 meta
drwxr-xr-x. 5 root root 41 8鏈 21 2019 usr
drwxr-xr-x. 4 root root 28 8鏈 21 2019 var
drwxr-xr-x. 4 root root 34 9鏈 5 15:21 wal
修改配置文件 influxdb.conf中如下内容
[meta]
dir = "/usr/local/influx/meta"
[data]
dir = "/usr/local/influx/data"
wal-dir = "/usr/local/influx/wal"
series-id-set-cache-size = 100
[coordinator]
[retention]
enabled = true
check-interval = "30m"
为了命令调用方便增加环境变量配置
export PATH=$PATH:/usr/local/influx/usr/bin
启动服务,日志中可以看到相关配置如下:
[root@localhost influx]# influxd -config influxdb.conf
influxdb基本操作
使用influx客户端连接服务,即可进行相关操作
数据库操作
显示数据库
show databases
创建数据库
create database influxdb
删除数据库
drop database influxdb
使用数据库
use influxdb
数据保留策略
数据保留策略创建语法
CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION
<duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
创建数据保留策略
CREATE RETENTION POLICY “influx_retention” ON “influxdb” DURATION 30d
REPLICATION 1 DEFAULT;
查看保留期
SHOW RETENTION POLICIES ON influxdb
修改保留期
ALTER RETENTION POLICY “influx_retention” ON influxdb DURATION 15d
删除保留期
DROP RETENTION POLICY “influx_retention” ON influxdb
表操作
表增删查操作
显示所有表
show measurements
插入数据
> use influxdb
>insert weather,altitude=1000,area=北 temperature=11,humidity=-4
查询表
select * from weather
设置时间显示格式
precision rfc3339
删除表
DROP MEASUREMENT weather
示例如下:
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> show databases;
ERR: unable to parse authentication credentials
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use <database>".
> show databases; --显示数据库
name: databases
name
----
_internal
eim
> create database zxmtest --创建数据库
> show databases;
name: databases
name
----
_internal
eim
zxmtest
> drop database zxmtest; --删除数据库
> use eim --选择数据库
Using database eim
> create retention policy policy1 on eim duration 30d replication 2 default; --创建数据保存策略
> show retention policies on eim --查看数据保存策略
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
influx_retention 720h0m0s 24h0m0s 1 false
policy1 720h0m0s 24h0m0s 2 true
> alter retention policy policy1 on eim duration 15d; --修改数据保存策略
> show retention policies on eim
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
influx_retention 720h0m0s 24h0m0s 1 false
policy1 360h0m0s 24h0m0s 2 true
> drop retention policy policy1 on eim --删除数据保存策略
> show measurements; --查看指标清单
name: measurements
name
----
weather
> create retention policy policy1 on eim duration 30d replication 2 default;
> show retention policies on eim
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
influx_retention 720h0m0s 24h0m0s 1 false
policy1 720h0m0s 24h0m0s 2 true
> select * from weather;
> insert tem,t1=1000,t2=1 tem=11 插入数据 到指标 tem
> insert tem,t1=1000,t2=1 tem=12
> insert tem,t1=1000,t2=1 tem=13
> insert tem,t1=1000,t2=1 tem=14
> insert tem,t1=1000,t2=1 tem=15
> insert tem,t1=1000,t2=2 tem=15
> insert tem,t1=1000,t2=2 tem=14
> insert tem,t1=1000,t2=2 tem=13
> insert tem,t1=1000,t2=2 tem=12
> select * from tem 查询指标数据
name: tem
time t1 t2 tem
---- -- -- ---
1638638410347983907 1000 1 11
1638638414273143226 1000 1 12
1638638415636644887 1000 1 13
1638638417093045518 1000 1 14
1638638418964082753 1000 1 15
1638638425116806331 1000 2 15
1638638427669899113 1000 2 14
1638638429520189744 1000 2 13
1638638431234719109 1000 2 12
> precision rfc3339 --修改时间显示格式
> select * from tem
name: tem
time t1 t2 tem
---- -- -- ---
2021-12-04T17:20:10.347983907Z 1000 1 11
2021-12-04T17:20:14.273143226Z 1000 1 12
2021-12-04T17:20:15.636644887Z 1000 1 13
2021-12-04T17:20:17.093045518Z 1000 1 14
2021-12-04T17:20:18.964082753Z 1000 1 15
2021-12-04T17:20:25.116806331Z 1000 2 15
2021-12-04T17:20:27.669899113Z 1000 2 14
2021-12-04T17:20:29.520189744Z 1000 2 13
2021-12-04T17:20:31.234719109Z 1000 2 12
用户操作
显示用户
show users
创建用户
【普通用户】创建用户并设置密码
CREATE USER influx WITH PASSWORD ‘influxdb’;
【管理员用户】
create user “admin” with password ‘admin’ with all privileges;
修改用户密码
SET PASSWORD FOR influx = ‘influx’
删除用户
drop user admin;
数据库访问权限
用户授权
授权用户数据库操作权限
GRANT ALL PRIVILEGES ON influxdb TO influx
赋予用户管理员权限
GRANT ALL PRIVILEGES TO influx
备注:只能使用admin权限才可以操作数据库
撤销授权
撤销用户数据库操作权限
Revoke ALL PRIVILEGES ON influxdb FROM influx
撤销用户管理员权限
Revoke ALL PRIVILEGES FROM influx
示例操作如下:
> show users
user admin
---- -----
admin true
eim true
> create user zxm with password zxm
ERR: error parsing query: found zxm, expected string at line 1, char 31
> create user "zxm" with password 'zxm'
> show users
user admin
---- -----
admin true
eim true
zxm false
> set password for zxm='zxm'
> create user "zxm2" with password 'zxm2' with all privileges
> drop user zxm
> show users
user admin
---- -----
admin true
eim true
zxm2 true
> create user "zxm3" with password 'zxm3'
> show users
user admin
---- -----
admin true
eim true
zxm2 true
zxm3 false
> grant all privileges on eim to zxm3
> revoke all privileges on eim from zxm3
> revoke all privileges from zxm2
开启用户登录认证
开启登录认证
在influxdb 配置文件influxdb.conf中,开启用户登录认证,添加如下内容:
[http]
auth-enabled = true
开启认证后无密码登录
bin/influx
开启认证后有密码登录
bin/influx -username influx -password influx
修改配置文件并重启服务
开启身份认证后,直接进行数据库操作会提示没有认证
> show users
ERR: unable to parse authentication credentials
使用用户密码后 正常
[root@localhost influxdb]# influx -username eim -password eim
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> show users
user admin
---- -----
admin true
eim true
zxm2 false
zxm3 false