![InfluxDB 2.0 | 备份结果为 `read:dbrp is unauthorized`。如何迁移 bucket 数据?](https://linux22.com/image/754851/InfluxDB%202.0%20%7C%20%E5%A4%87%E4%BB%BD%E7%BB%93%E6%9E%9C%E4%B8%BA%20%60read%3Adbrp%20is%20unauthorized%60%E3%80%82%E5%A6%82%E4%BD%95%E8%BF%81%E7%A7%BB%20bucket%20%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
我们正在 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 文件以将缺少的权限添加到令牌中。操作如下:
- 停止你的 influxd 进程
- 升级到最新的 influxd beta(目前为 beta-15)。
- 安装https://github.com/br0xen/boltbrowser在备份所在的机器上。可能还有其他 boltdb 浏览器,但这是我用来测试的。
- 备份您的
~/.influxdbv2/influxd.bolt
。这真的很重要。如果您以任何方式损坏此文件,您将无法访问数据库中的任何数据。所以,也许做两个备份 :) - 使用类似的方法加载你的 boltdb 文件
boltbrowser ~/.influxdbv2/influxd.bolt
你应该会看到类似这样的内容: - 导航到
authorizationsv1
父级并找到具有根令牌 ID 的密钥。如果您有多个令牌,则可以在父级中找到令牌 -> ID 的映射authorizationindexv1
。 - 我们要做的是将
dbrp
权限添加到 json 数组值中。如果点击e
,您将能够手动编辑该值。在数组的最末尾permissions
,添加以下用于读取和写入 dbrp 资源的条目:({"action":"read","resource":{"type":"dbrp"}},{"action":"write","resource":{"type":"dbrp"}}
不要忘记逗号)。您可能会发现将 json 导出到文件(键x
)并在那里测试编辑更容易。 - 您可能还需要为
stack
资源添加权限,即{"action":"read","resource":{"type":"stack"}},{"action":"write","resource":{"type":"stack"}}
。长话短说,如果您完成此过程后仍然收到类似这样的消息Error: read:<resource> is unauthorized
,只需返回并添加该资源的读/写权限即可。 - 按 Enter 键保存该值,然后按 Esc 键返回终端。
- 启动您的 influxd 实例,并通过导航到 UI 中的令牌页面或
influx auth list
在 cli 中运行来检查令牌是否有效。您应该看到添加了新权限。 - 再次尝试导出。
如果出现任何问题,请删除已编辑的螺栓文件,恢复备份,然后重试。
答案2
这是一个相当令人沮丧的问题。也许我们可以手动更改 influxdb 存储配置设置的 boltdb 的内容。
编辑:
看来我的这个想法可行。
使用以下代码编辑 influxd.bolt 文件:螺栓浏览器:
- 打开 authorizationsv1 存储桶
- 查找备份用户的token(值为json格式)
- 将以下两个对象添加到权限数组中:
{
"action": "read",
"resource": {
"type": "dbrp"
}
}, {
"action": "write",
"resource": {
"type": "dbrp"
}
}