…略
…略
mysql | influxdb | 说明 |
---|---|---|
database/bucket | database | 数据库 |
table | measurement | 类似mysql中表的概念 |
record | tag + field + timestamp | 传统表中的一行数据,映射到influxdb中,可以划分为三个 |
InfluxDB中的series是一种数据源的合的概念,在同一个database中,相同retention policy、相同measurement、相同tag的数据属于一个series集合,标识这条数据来自哪里,同一个series的数据在物理上按照时间顺序排列在一起。
所有每个point是根据 timestamp + series 来保证唯一性
InfluxDB没有提供直接删除Points的方法,但是它提供了Retention Policies。
主要用于指定数据的保留时间:用于决定数据保存多久(意思是数据可以删除),保存几个备份,集群的处理等
# 创建数据库
CREATE DATABASE "db_name"
# 显示所有数据库
SHOW DATABASES
# 删除数据库
DROP DATABASE "db_name"
# 使用数据库
USE mydb
# 显示该数据库中的表
SHOW MEASUREMENTS
# 创建表
# 直接在插入数据的时候指定表名(weather就是表名)
insert weather,altitude=1000,area=北 temperature=11,humidity=-4
# 删除表
DROP MEASUREMENT "measurementName"
//查看策略
> show retention policies on db_name
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
//新建策略 名称 库 时间 副本数 是否是默认策略
create retention policy "2_hour" on hh_test duration 2h replication 1 default
//修改策略
> alter retention policy "2_hour" on hh_test duration 4h default
//删除策略
> drop retention policy "2_hour" on hh_test
# 显示用户
SHOW USERS
# 创建用户
CREATE USER "username" WITH PASSWORD 'password'
# 删除用户
DROP USER "username"
# 创建管理员权限的用户
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES
#重设密码
set password for xxx='newpwd'
//授权
GRANT ALL PRIVILEGES TO <username>
GRANT [READ,WRITE,ALL] ON <database_name> TO <username>
//查询授权
show grants for <username>
//回收
REVOKE ALL PRIVILEGES FROM <username>
REVOKE [READ,WRITE,ALL] ON <database_name> FROM <username>
//查看tag的keys
show tag keys on <database> from <measurement>
//查看tag的value
show tag values on <database> from <measurement> with KEY [ [<operator> "" | <regular_expression>] | [IN ("" ,")]] [WHERE <tag_key> <operator> ['' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]
//例如
show tag values from table_name with key="ty"
//查看field
show field keys on <database> from <measurement>
//查看series
show series on <database> from <measurement>
新增
insert into <retention policy> measurement,tagKey=tagValue fieldKey=fieldValue timestamp
类型 | 方式 | 示例 |
---|---|---|
float | 数字 | user_id=21 |
int | 数字i | age=18i |
boolean | true/false | boy=true |
String | “” or ‘’ | email=”[email protected]“ |
删除
DELETE FROM <measurement_name> WHERE [<tag_key>='' ] | [<time interval>]
修改
在influxdb中没有专门的修改数据的update语句,对于influxdb而言,如果想修改数据,还是得使用我们前面的说到的insert来实现
那么我们大致能够写出如下的语句来命中数据:
//tag 必须完全和之前insert的数据相等
insert into <retention policy> measurement,tagKey=tagValue fieldKey=fieldValue timestamp
通过这条语句可以增量修改field。
如果想修改之前的field,则需要先删除,后插入
基础语句
SELECT <field_key>[,<field_key>,<tag_key>]
FROM <measurement_name>[,<measurement_name>]
WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]
GROUP BY [* | <tag_key>[,<tag_key]]
order by time desc/asc
LIMIT <N> OFFSET <N>
SLIMIT <N>
select
from
where
group
slimit
limit offset
let mut client = Client::new("http://123.57.130.20:8086".parse().unwrap(), "takeout").set_authentication("root", "123");
if client.ping().await {
wd_log::log_info_ln!("连接数据库成功")
}else{
wd_log::log_info_ln!("连接数据库失败")
}
let _ = client.switch_database("takeout");
pub async fn insert(client:&Client) -> Result<(), Error> {
let mut point = Point::new("student")
.add_tag("id",Value::String("2".to_string()))
.add_field("name",Value::String("我是坏人".to_string()))
.add_field("age",Value::Integer(21));
client.write_point(point,None,None).await
}
pub async fn delete(client:&Client, id:String) -> Result<Option<Vec<Node>>, Error> {
let query = format!(r#"delete from student where "id" = '{}'"#,id);
client.query(query.as_str(),None).await
}
pub async fn select(client:&Client, id:String) -> Result<Option<Vec<Node>>, Error> {
let query = format!(r#"select * from student where "id" = '{}'"#,id);
client.query(query.as_str(),None).await
}
pub async fn select_time(client:&Client, time:usize) -> Result<Option<Vec<Node>>, Error> {
let query = format!(r#"select * from student where "time" > {}"#,time);
client.query(query.as_str(),None).await
}
备份命令
influxd backup
[ -database <db_name> ] --> 指定需要备份的数据库名
[ -portable ] --> 表示在线备份
[ -host <host:port> ] --> influxdb服务所在的机器,端口号默认为8088
[ -retention <rp_name> ] | [ -shard <shard_ID> -retention <rp_name> ] --> 备份的保留策略,注意shard是挂在rp下的;我们需要备份的就是shard中的数据
[ -start <timestamp> [ -end <timestamp> ] | -since <timestamp> ] --> 备份指定时间段的数据
<path-to-backup> --> 备份文件的输出地址
备份全部
influxd backup -portable /tmp/data/total
恢复命令
influxd restore
[ -db <db_name> ] --> 待恢复的数据库(备份中的数据库名)
-portable | -online
[ -host <host:port> ] --> influxdb 的服务器
[ -newdb <newdb_name> ] --> 恢复到influxdb中的数据库名
[ -rp <rp_name> ] --> 备份中的保留策略
[ -newrp <newrp_name> ] --> 恢复的保留策略
[ -shard <shard_ID> ]
<path-to-backup-files>
未完待续