Мы запускаем экземпляр InfluxDB 2.0 в среде докеров. Несколько недель мы собирали данные с помощью телеграфа и храним их в корзине. Теперь мы хотели бы сделать резервную копию наших данных.
Что мы можем сделать, чтобы сохранить наши данные, так это сделать копию /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"
ничего не нашел бы в интернете.
Единственный намек, который я получил от документация:
Если вы настроили InfluxDB с использованием v2.0.0-beta.1 или более ранней версии, вы не сможете выполнять резервное копирование данных. У корневых токенов, созданных до v2.0.0-beta.2, нет необходимых разрешений. Чтобы успешно использовать инструмент резервного копирования, настройте новый экземпляр InfluxDB, используя v2.0.0-beta.2 +.
Я почти уверен, что мы начали с более позднего бета-версия, с марта, но я не могу это проверить дважды. Однако я хотел бы найти решение для экспорта наших данных.
Поскольку казалось, что у нас нет нужных разрешений, я проверил разрешения и хотел попробовать добавление недостающих разрешений моему администратору, что явно не сработало.
Во время проверки разрешений я вижу, что у моего токена администратора нет dbrp
разрешения. Но когда я создаю новый токен в графическом интерфейсе через Генерировать -> Все токены доступа, то у нового токена есть необходимые разрешения:
$ 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
В поисках этой ошибки нахожу одну аналогичная проблема, который ссылается другой.
Прочитав это, я попытался установить свой токен через файл учетных данных. Но это ничего не меняло.
Когда я создаю новый Docker-контейнер InfluxDB 2.0, influx backup
команда работает как положено. Итак, чтобы использовать встроенные команды, я хотел бы перенести собранные данные из моей корзины в другой экземпляр. Видите ли вы возможность или мне что-то не хватает, чтобы эти команды работали?
Большое спасибо.
PS: Ой, нет influxdb
тег, вообще? И у меня недостаточно репутации, чтобы создать этот тег. Надеюсь, это подходящая платформа для вопросов и ответов?
Вчера я опубликовал этот ответ на проблему, которая поможет (инструкции дублируются ниже): https://github.com/influxdata/influxdb/issues/18882#issuecomment-663113088
Вы можете вручную отредактировать файл boltdb, чтобы добавить к токену недостающие разрешения. Вот как:
~/.influxdbv2/influxd.bolt
. Мол, это действительно важно. Если вы каким-либо образом повредите этот файл, вы НЕ сможете получить доступ к каким-либо данным в своей базе данных. Так что, может быть, сделайте две резервные копии :)boltbrowser ~/.influxdbv2/influxd.bolt
Вы должны увидеть что-то вроде этого: authorizationsv1
parent и найдите ключ с идентификатором корневого токена. Если у вас более одного токена, вы можете найти сопоставление для токена -> id в authorizationindexv1
родитель.dbrp
разрешение в значение массива json. если ты ударил e
, вы сможете изменить значение вручную. В самом конце permissions
array и добавьте следующую запись для чтения и записи ресурса dbrp: {"action":"read","resource":{"type":"dbrp"}},{"action":"write","resource":{"type":"dbrp"}}
(не забывайте запятую). Возможно, вам будет проще экспортировать json в файл ( x
key) и протестируйте редактирование там.stack
ресурс, который {"action":"read","resource":{"type":"stack"}},{"action":"write","resource":{"type":"stack"}}
. Короче говоря, если вы пройдете через этот процесс и все равно получите сообщение вроде Error: read:<resource> is unauthorized
, просто вернитесь и добавьте чтение / запись для этого ресурса.influx auth list
в кли. Вы должны увидеть добавленные новые разрешения.Если что-то пойдет не так, удалите отредактированный файл болта, восстановите резервную копию и повторите попытку.
Это довольно неприятная проблема. Возможно, мы могли бы вручную изменить содержимое boltdb, в котором infxdb хранит параметры конфигурации.
Редактировать:
Похоже, моя хакерская идея работает.
Отредактируйте файл infxd.bolt с помощью болтбраузер:
{
"action": "read",
"resource": {
"type": "dbrp"
}
}, {
"action": "write",
"resource": {
"type": "dbrp"
}
}