文档文档

InfluxDB 错误消息

此页面记录了早期版本的 InfluxDB OSS。InfluxDB OSS v2 是最新的稳定版本。请参阅 InfluxDB v2 文档

此页面记录了错误、其描述以及(如果适用)常见的解决方案。

免责声明: 本文档不包含所有可能的 InfluxDB 错误的详尽列表。

错误:database name required(数据库名称是必需的)

当某些 SHOW 查询未指定数据库时,会发生 database name required 错误。在 SHOW 查询中使用 ON 子句指定数据库,在 CLI 中使用 USE <database_name> 指定数据库,或在 InfluxDB API 请求中使用 db 查询字符串参数指定数据库。

相关的 SHOW 查询包括 SHOW RETENTION POLICIESSHOW SERIESSHOW MEASUREMENTSSHOW TAG KEYSSHOW TAG VALUESSHOW FIELD KEYS

资源: 模式探索InfluxQL 参考

错误: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 允许每个数据库的序列数不受限制。

资源: 数据库配置

错误解析查询:found < >, expected identifier at line < >, char < >(在第 < > 行,字符 < > 处发现 < >,应为标识符)

InfluxQL 语法

当 InfluxDB 预期在查询中找到标识符但未找到时,会发生 expected identifier 错误。标识符是引用连续查询名称、数据库名称、字段键、度量名称、保留策略名称、订阅名称、标签键和用户名的标记。此错误通常是温和地提醒您仔细检查查询的语法。

示例

查询 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 QUERYON 之间缺少连续查询名称。

查询 2

> SELECT * FROM WHERE "blue" = true
ERR: error parsing query: found WHERE, expected identifier at line 1, char 15

查询 2 在 FROMWHERE 之间缺少度量名称。

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 关键字查询语言文档

错误解析查询: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'

请注意,在身份验证请求时不应包含单引号。

资源: 身份验证和授权

错误解析查询:mixing aggregate and non-aggregate queries is not supported(不支持混合聚合查询和非聚合查询)

SELECT 语句同时包含聚合函数和独立的字段键标签键时,会发生 mixing aggregate and non-aggregate 错误。

聚合函数返回单个计算值,并且对于任何未聚合的字段或标签,没有明显的单个值可以返回。

示例

原始数据

peg 度量有两个字段(squareround)和一个标签 (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 度量中 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 度量中 square 的四个值计算出的单个聚合值,并且对于 force 标签的四个未聚合值,没有明显的单个标签值可以返回。

资源: 函数

invalid operation: time and \*influxql.VarRef are not compatible(无效操作:time 和 \*influxql.VarRef 不兼容)

当日期时间字符串在查询中用双引号括起来时,会发生 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(无法解析 < >:错误的时间戳)

时间戳语法

Line Protocol 包含的 timestamp(时间戳)格式不是 UNIX 时间戳时,会发生 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"}

上面的 Line Protocol 使用了 RFC3339 时间戳。将时间戳替换为 UNIX 时间戳,以避免错误并成功将点写入 InfluxDB

> INSERT pineapple,fresh=true value=1 1439938800000000000

InfluxDB Line Protocol 语法

在某些情况下,bad timestamp 错误会与 InfluxDB Line Protocol 中更通用的语法错误一起发生。Line Protocol 对空格敏感;错误放置的空格可能导致 InfluxDB 认为字段或标签是无效的时间戳。

示例

写入 1

> INSERT hens location=2 value=9
ERR: {"error":"unable to parse 'hens location=2 value=9': bad timestamp"}

写入 1 中的 Line Protocol 使用空格而不是逗号分隔了 hen 度量和 location=2 标签。InfluxDB 认为 value=9 字段是时间戳并返回错误。

在度量和标签之间使用逗号而不是空格以避免错误

> 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 中的 Line Protocol 使用空格而不是逗号分隔了 milk_prod=3 字段和 happy=3 字段。InfluxDB 认为 happy=3 字段是时间戳并返回错误。

在两个字段之间使用逗号而不是空格以避免错误

> INSERT cows,name=daisy milk_prod=3,happy=3

资源: InfluxDB Line Protocol 教程InfluxDB Line Protocol 参考

unable to parse < >: time outside range(无法解析 < >:时间超出范围)

InfluxDB Line Protocol 中的时间戳超出 InfluxDB 的有效时间范围时,会发生 time outside range 错误。

最小有效时间戳为 -92233720368547758061677-09-21T00:12:43.145224194Z。最大有效时间戳为 92233720368547758062262-04-11T23:47:16.854775806Z

资源: InfluxDB Line Protocol 教程InfluxDB Line Protocol 参考

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 度量中的 memBytes 字段,以了解内存中缓存的大小。

资源: 数据库配置

already killed(已终止)

当查询已被终止,但在查询退出之前有后续的终止尝试时,会发生 already killed 错误。当查询被终止时,它可能不会立即退出。它将处于 killed 状态,这意味着信号已发送,但查询本身尚未到达中断点。

资源: 查询管理

常见的 -import 错误

查找在使用命令行界面 (CLI) 导入数据时发生的常见错误。

  1. (可选)通过运行以下任何命令来自定义如何查看 -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}
  1. 查看导入错误以查找可能的解决方法

注意: 要了解如何使用 -import 命令,请参阅 使用 -import 从文件导入数据

数据类型不一致

错误: partial write: field type conflict:(部分写入:字段类型冲突:)

当导入的度量中的字段具有不一致的数据类型时,会发生此错误。确保度量中的所有字段都具有相同的数据类型,例如 float64、int64 等。

数据点早于保留策略

错误: partial write: points beyond retention policy dropped={number-of-points-dropped}(部分写入:超出保留策略的点被丢弃={number-of-points-dropped})

当导入的数据点早于指定的保留策略并被丢弃时,会发生此错误。验证导入文件中是否指定了正确的保留策略。

未命名的导入文件

错误: reading standard input: /path/to/directory: is a directory(读取标准输入:/path/to/directory:是一个目录)

-import 命令不包含导入文件的名称时,会发生此错误。指定要导入的文件,例如:$ influx -import -path={filename}.txt -precision=s

Docker 容器无法读取主机文件

错误: open /path/to/file: no such file or directory(打开 /path/to/file:没有这样的文件或目录)

当 Docker 容器无法读取主机上的文件时,会发生此错误。要使主机文件可读,请完成以下步骤。

使主机文件对 Docker 可读

  1. 创建一个目录,然后将要导入 InfluxDB 的文件复制到此目录。

  2. 启动 Docker 容器时,通过运行以下命令将新目录挂载到 InfluxDB 容器上

    docker run -v /dir/path/on/host:/dir/path/in/container
    
  3. 通过运行以下命令验证 Docker 容器是否可以读取主机文件

    influx -import -path=/path/in/container
    

此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像当前一样使用它,而无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速的最新数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建于 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看