InfluxDB 错误消息
此页面记录了早期版本的 InfluxDB OSS。 InfluxDB OSS v2 是最新的稳定版本。 请参阅 InfluxDB v2 文档。
此页面记录了错误、其描述以及(如果适用)常见的解决方案。
免责声明: 本文档不包含所有可能的 InfluxDB 错误的详尽列表。
error: database name required
当某些 SHOW
查询未指定数据库时,会发生 database name required
错误。 在 SHOW
查询中使用 ON
子句指定数据库,在 CLI 中使用 USE <database_name>
指定数据库,或者在 InfluxDB API 请求中使用 db
查询字符串参数指定数据库。
相关的 SHOW
查询包括 SHOW RETENTION POLICIES
、SHOW SERIES
、SHOW MEASUREMENTS
、SHOW TAG KEYS
、SHOW TAG VALUES
和 SHOW FIELD KEYS
。
资源: 模式探索, InfluxQL 参考
error: max series per database exceeded: < >
当写入导致数据库中的序列数量超过每个数据库允许的最大序列数时,会发生 max series per database exceeded
错误。 每个数据库允许的最大序列数由配置文件 [data]
部分中的 max-series-per-database
设置控制。
< >
中的信息显示了超出 max-series-per-database
的序列的 measurement 和 tag set。
默认情况下,max-series-per-database
设置为一百万。 将设置更改为 0
允许每个数据库的序列数量不受限制。
资源: 数据库配置
error parsing query: found < >, expected identifier at line < >, char < >
InfluxQL 语法
当 InfluxDB 预期在查询中找到标识符但未找到时,会发生 expected identifier
错误。 标识符是引用连续查询名称、数据库名称、字段键、measurement 名称、保留策略名称、订阅名称、标签键和用户名的令牌。 此错误通常是温和地提醒您仔细检查查询的语法。
示例
查询 1
> CREATE CONTINUOUS QUERY ON "telegraf" BEGIN SELECT mean("usage_idle") INTO "average_cpu" FROM "cpu" GROUP BY time(1h),"cpu" END
ERR: error parsing query: found ON, expected identifier at line 1, char 25
查询 1 在 CREATE CONTINUOUS QUERY
和 ON
之间缺少连续查询名称。
查询 2
> SELECT * FROM WHERE "blue" = true
ERR: error parsing query: found WHERE, expected identifier at line 1, char 15
查询 2 在 FROM
和 WHERE
之间缺少 measurement 名称。
InfluxQL 关键字
在某些情况下,当查询中的标识符之一是 InfluxQL 关键字时,会发生 expected identifier
错误。 要成功查询也是关键字的标识符,请将该标识符用双引号括起来。
示例
查询 1
> SELECT duration FROM runs
ERR: error parsing query: found DURATION, expected identifier, string, number, bool at line 1, char 8
在查询 1 中,字段键 duration
是一个 InfluxQL 关键字。 用双引号括起 duration
以避免错误
> SELECT "duration" FROM runs
查询 2
> CREATE RETENTION POLICY limit ON telegraf DURATION 1d REPLICATION 1
ERR: error parsing query: found LIMIT, expected identifier at line 1, char 25
在查询 2 中,保留策略名称 limit
是一个 InfluxQL 关键字。 用双引号括起 limit
以避免错误
> CREATE RETENTION POLICY "limit" ON telegraf DURATION 1d REPLICATION 1
虽然使用双引号是一种可接受的解决方法,但为了简单起见,我们建议您避免使用 InfluxQL 关键字作为标识符。
资源: InfluxQL 关键字, 查询语言文档
error parsing query: found < >, expected string at line < >, char < >
当 InfluxDB 预期找到字符串但未找到时,会发生 expected string
错误。 在大多数情况下,此错误是由于忘记在 CREATE USER
语句中引用密码字符串。
示例
> CREATE USER penelope WITH PASSWORD timeseries4dayz
ERR: error parsing query: found timeseries4dayz, expected string at line 1, char 36
CREATE USER
语句要求在密码字符串周围使用单引号
> CREATE USER penelope WITH PASSWORD 'timeseries4dayz'
请注意,在验证请求时,不应包含单引号。
资源: 身份验证和授权
error parsing query: mixing aggregate and non-aggregate queries is not supported
当 SELECT
语句同时包含聚合函数和独立的字段键或标签键时,会发生 mixing aggregate and non-aggregate
错误。
聚合函数返回单个计算值,并且对于任何未聚合的字段或标签,没有明显的单个值可以返回。
示例
原始数据
peg
measurement 有两个字段(square
和 round
)和一个标签 (force
)
name: peg
---------
time square round force
2016-10-07T18:50:00Z 2 8 1
2016-10-07T18:50:10Z 4 12 2
2016-10-07T18:50:20Z 6 14 4
2016-10-07T18:50:30Z 7 15 3
查询 1
> SELECT mean("square"),"round" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supported
查询 1 包含聚合函数和一个独立字段。
mean("square")
从 peg
measurement 中 square
的四个值返回单个聚合值,并且没有明显的单个字段值可以从 round
字段的四个未聚合值返回。
查询 2
> SELECT mean("square"),"force" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supported
查询 2 包含聚合函数和一个独立标签。
mean("square")
从 peg
measurement 中 square
的四个值返回单个聚合值,并且没有明显的单个标签值可以从 force
标签的四个未聚合值返回。
资源: 函数
invalid operation: time and \*influxql.VarRef are not compatible
当在查询中双引号日期时间字符串时,会发生 time and \*influxql.VarRef are not compatible
错误。 日期时间字符串需要单引号。
示例
双引号日期时间字符串
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= "2015-08-18T00:00:00Z" AND time <= "2015-08-18T00:12:00Z"
ERR: invalid operation: time and *influxql.VarRef are not compatible
单引号日期时间字符串
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:12:00Z'
name: h2o_feet
time water_level
---- -----------
2015-08-18T00:00:00Z 2.064
2015-08-18T00:06:00Z 2.116
2015-08-18T00:12:00Z 2.028
资源: 数据探索
unable to parse < >: bad timestamp
时间戳语法
当行协议包含的 timestamp 格式不是 UNIX timestamp 时,会发生 bad timestamp
错误。
示例
> INSERT pineapple value=1 '2015-08-18T23:00:00Z'
ERR: {"error":"unable to parse 'pineapple value=1 '2015-08-18T23:00:00Z'': bad timestamp"}
上面的行协议使用 RFC3339 timestamp。 将 timestamp 替换为 UNIX timestamp 以避免错误并成功将数据点写入 InfluxDB
> INSERT pineapple,fresh=true value=1 1439938800000000000
InfluxDB 行协议语法
在某些情况下,当 InfluxDB 行协议中存在更通用的语法错误时,也会发生 bad timestamp
错误。 行协议对空格敏感; 错误放置的空格可能会导致 InfluxDB 认为字段或标签是无效的时间戳。
示例
写入 1
> INSERT hens location=2 value=9
ERR: {"error":"unable to parse 'hens location=2 value=9': bad timestamp"}
写入 1 中的行协议使用空格而不是逗号分隔 hen
measurement 和 location=2
标签。 InfluxDB 认为 value=9
字段是 timestamp 并返回错误。
在 measurement 和标签之间使用逗号而不是空格以避免错误
> INSERT hens,location=2 value=9
写入 2
> INSERT cows,name=daisy milk_prod=3 happy=3
ERR: {"error":"unable to parse 'cows,name=daisy milk_prod=3 happy=3': bad timestamp"}
写入 2 中的行协议使用空格而不是逗号分隔 milk_prod=3
字段和 happy=3
字段。 InfluxDB 认为 happy=3
字段是 timestamp 并返回错误。
在两个字段之间使用逗号而不是空格以避免错误
> INSERT cows,name=daisy milk_prod=3,happy=3
资源: InfluxDB 行协议教程, InfluxDB 行协议参考
unable to parse < >: time outside range
当InfluxDB 行协议中的 timestamp 超出 InfluxDB 的有效时间范围时,会发生 time outside range
错误。
最小有效时间戳为 -9223372036854775806
或 1677-09-21T00:12:43.145224194Z
。 最大有效时间戳为 9223372036854775806
或 2262-04-11T23:47:16.854775806Z
。
资源: InfluxDB 行协议教程, InfluxDB 行协议参考
write failed for shard < >: engine: cache maximum memory size exceeded
当缓存的内存大小增加到超出配置文件中的 cache-max-memory-size
设置时,会发生 cache maximum memory size exceeded
错误。
默认情况下,cache-max-memory-size
设置为 512mb。 此值对于大多数工作负载来说足够好,但对于较大的写入量或具有较高序列基数的数据集来说太小。 如果您有大量 RAM,您可以将其设置为 0
以禁用缓存的内存限制,并且永远不会收到此错误。 您还可以检查 _internal
数据库中 cache
measurement 中的 memBytes
字段,以了解内存中缓存的大小。
资源: 数据库配置
already killed
当查询已被终止,但在查询退出之前有后续终止尝试时,会发生 already killed
错误。 当查询被终止时,它可能不会立即退出。 它将处于 killed
状态,这意味着信号已发送,但查询本身尚未到达中断点。
资源: 查询管理
常见的 -import
错误
查找在命令行界面 (CLI) 中导入数据时发生的常见错误。
- (可选)通过运行以下任何命令,自定义如何查看
-import
错误和输出
- 将错误和输出发送到新文件:
influx -import -path={import-file}.gz -compressed {new-file} 2>&1
- 将错误和输出发送到单独的文件:
influx -import -path={import-file}.gz -compressed > {output-file} 2> {error-file}
- 将错误发送到新文件:
influx -import -path={import-file}.gz -compressed 2> {new-file}
- 将输出发送到新文件:
influx -import -path={import-file}.gz -compressed {new-file}
- 查看导入错误以查找可能的原因并解决问题
注意: 要了解如何使用
-import
命令,请参阅使用-import
从文件导入数据。
数据类型不一致
错误: partial write: field type conflict:
当导入的 measurement 中的字段具有不一致的数据类型时,会发生此错误。 确保 measurement 中的所有字段都具有相同的数据类型,例如 float64、int64 等。
数据点比保留策略旧
错误: partial write: points beyond retention policy dropped={number-of-points-dropped}
当导入的数据点比指定的保留策略旧并被丢弃时,会发生此错误。 验证导入文件中是否指定了正确的保留策略。
未命名的导入文件
错误: reading standard input: /path/to/directory: is a directory
当 -import
命令不包含导入文件的名称时,会发生此错误。 指定要导入的文件,例如:$ influx -import -path={filename}.txt -precision=s
Docker 容器无法读取主机文件
错误: open /path/to/file: no such file or directory
当 Docker 容器无法读取主机上的文件时,会发生此错误。 要使主机文件可读,请完成以下步骤。
使主机文件对 Docker 可读
创建一个目录,然后将要导入到 InfluxDB 的文件复制到此目录。
启动 Docker 容器时,通过运行以下命令将新目录挂载到 InfluxDB 容器上
docker run -v /dir/path/on/host:/dir/path/in/container
通过运行以下命令验证 Docker 容器是否可以读取主机文件
influx -import -path=/path/in/container
此页是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子! 我们欢迎并鼓励您提供关于 InfluxDB 和本文档的反馈和错误报告。 要寻求支持,请使用以下资源
拥有年度合同或支持合同的客户可以联系 InfluxData 支持。