InfluxDB 2.0 | 备份结果为 `read:dbrp is unauthorized`。如何迁移 bucket 数据?

InfluxDB 2.0 | 备份结果为 `read:dbrp is unauthorized`。如何迁移 bucket 数据?

我们正在 docker 环境中运行 InfluxDB 2.0 实例。几周来,我们一直使用 telegraf 收集数据并将其存储在存储桶中。现在,我们想备份我们的数据。

我们可以做的是复制一份来保存数据/root/.influxdbv2/,但我们更喜欢使用内置功能,并能够将数据恢复到另一个 InfluxDB 2.0 实例中。这就是问题的开始。

流入版本

$ influx version
Influx CLI 2.0.0-beta.13 (git: 86796ddf2d) build_date: 2020-07-09T12:15:08Z

尝试进行备份

$ export INFLUX_TOKEN=<token of admin user>
$ influx bucket find --org myOrg
ID                      Name            Retention       Organization ID
05b89a36ffe01003        _monitoring     168h0m0s        05b89a36ffe01000
05b89a36ffe01002        _tasks          72h0m0s         05b89a36ffe01000
05b89a36ffe01001        myBucket        0s              05b89a36ffe01000

$ influx backup -p /backup/backup_$(date '+%Y-%m-%d_%H-%M')
Error: read:dbrp is unauthorized
See 'influx backup -h' for help

在互联网上搜索influx "Error: read:dbrp is unauthorized"不会找到任何东西。

我得到的唯一提示是文档

如果您使用 v2.0.0-beta.1 或更早版本设置 InfluxDB,则无法备份数据。在 v2.0.0-beta.2 之前创建的根令牌没有必要的权限。要成功使用备份工具,请使用 v2.0.0-beta.2+ 设置新的 InfluxDB 实例。

我很确定我们后来开始测试版,从三月开始,但我无法仔细检查。不过,我想找到一个解决方案来导出我们的数据。

尝试添加缺少的权限

由于我们似乎没有正确的权限,我检查了权限并想尝试向我的管理员用户添加缺少的权限,这显然没有起作用。

检查当前权限

在检查权限期间,我可以看到我的管理员用户令牌没有任何权限。但是当我通过->dbrp在 GUI 中生成新令牌时,新令牌似乎具有所需的权限:GenerateAll access token

$ influx auth list
05f79912b4f73000        <newToken>       myAdmin        05b89a36e7e01000        [... read:orgs/05b89a36ffe01000/dbrp write:orgs/05b89a36ffe01000/dbrp ...]

(我缩短了输出)

添加权限时出错

不过,为了以防万一,我还是尝试将权限添加到我的管理员用户。

$ influx auth create --user myAdmin --org myOrg --read-dbrps
Error: Permission read:orgs/05b89a36ffe01000/dbrp is not allowed: read:orgs/05b89a36ffe01000/dbrp is unauthorized.

尝试新创建的令牌

正如我们在上面的步骤中看到的,新令牌具有 dprp 权限。当我使用此令牌进行备份时,我收到另一条错误消息。

$ export INFLUX_TOKEN=<newToken>
$ influx backup -p /backup/backup_$(date '+%Y-%m-%d_%H-%M')
Error: read:authorizations is unauthorized
See 'influx backup -h' for help

搜索此错误时,我发现一个类似问题,其中引用其他

读完这篇文章后,我尝试通过凭证文件.但是那并没有改变什么。

将数据迁移到新的 InfluxDB 2.0 实例

当我生成一个新的 InfluxDB 2.0 Docker 容器时,该influx backup命令按预期工作。因此,为了使用内置命令,我想将收集的数据从我的存储桶迁移到另一个实例。您是否看到任何可能性,或者我是否遗漏了使这些命令正常工作的任何东西?

多谢。

附言:哦,根本没有influxdb标签?而且我的声誉也不足以创建该标签。我希望这是提出我问题的合适问答平台?

答案1

我昨天发布了这个答案来回答一个问题,希望它能有所帮助(说明重复如下):https://github.com/influxdata/influxdb/issues/18882#issuecomment-663113088

您可以手动编辑 boltdb 文件以将缺少的权限添加到令牌中。操作如下:

  1. 停止你的 influxd 进程
  2. 升级到最新的 influxd beta(目前为 beta-15)。
  3. 安装https://github.com/br0xen/boltbrowser在备份所在的机器上。可能还有其他 boltdb 浏览器,但这是我用来测试的。
  4. 备份您的~/.influxdbv2/influxd.bolt。这真的很重要。如果您以任何方式损坏此文件,您将无法访问数据库中的任何数据。所以,也许做两个备份 :)
  5. 使用类似的方法加载你的 boltdb 文件boltbrowser ~/.influxdbv2/influxd.bolt你应该会看到类似这样的内容: 在此处输入图片描述
  6. 导航到authorizationsv1父级并找到具有根令牌 ID 的密钥。如果您有多个令牌,则可以在父级中找到令牌 -> ID 的映射authorizationindexv1
  7. 我们要做的是将dbrp权限添加到 json 数组值中。如果点击e,您将能够手动编辑该值。在数组的最末尾permissions,添加以下用于读取和写入 dbrp 资源的条目:({"action":"read","resource":{"type":"dbrp"}},{"action":"write","resource":{"type":"dbrp"}}不要忘记逗号)。您可能会发现将 json 导出到文件(键x)并在那里测试编辑更容易。
  8. 您可能还需要为stack资源添加权限,即{"action":"read","resource":{"type":"stack"}},{"action":"write","resource":{"type":"stack"}}。长话短说,如果您完成此过程后仍然收到类似这样的消息Error: read:<resource> is unauthorized,只需返回并添加该资源的读/写权限即可。
  9. 按 Enter 键保存该值,然后按 Esc 键返回终端。
  10. 启动您的 influxd 实例,并通过导航到 UI 中的令牌页面或influx auth list在 cli 中运行来检查令牌是否有效。您应该看到添加了新权限。
  11. 再次尝试导出。

如果出现任何问题,请删除已编辑的螺栓文件,恢复备份,然后重试。

答案2

这是一个相当令人沮丧的问题。也许我们可以手动更改 influxdb 存储配置设置的 boltdb 的内容。

编辑:
看来我的这个想法可行。

使用以下代码编辑 influxd.bolt 文件:螺栓浏览器

  • 打开 authorizationsv1 存储桶
  • 查找备份用户的token(值为json格式)
  • 将以下两个对象添加到权限数组中:
 {
    "action": "read",
    "resource": {
      "type": "dbrp"
    }
  }, {
    "action": "write",
    "resource": {
      "type": "dbrp"
   }
 }

相关内容