ArangoDB - 备份和恢复所有数据

ArangoDB - Backup and restore all data

我的目标是创建 arango 数据库转储(包含所有用户和密码、权限、数据库、集合、角色等),然后在另一台 arango 服务器(那是从头开始空安装)。

我用的是单节点配置,arangodb版本是3.4.4 [linux].

在 origin 上,我转储了每个数据库:

USER=root
PASSWORD=***
for db in $(arangosh --server.username "$USER" --server.password "$PASSWORD" --javascript.execute-string "db._databases().forEach(function(db) { print(db); });")
do
  arangodump --output-directory /tmp/dump/"$db" --overwrite true --server.username "$USER" --server.password "$PASSWORD" --include-system-collections --server.database "$db"
done

然后我将创建的文件夹移动到此服务器上的空 arangodb 服务器:

arangorestore --input-directory "/tmp/dump/_system/"
arangorestore --input-directory "/tmp/dump/collection/"
arangorestore --input-directory "/tmp/dump/collection2/"
...one by one 

如果结果与我的预期相去甚远,我只是在 _system 数据库中为 root 用户(没有其他用户,没有数据库)。

我做错了什么?如何进行完整备份和恢复?

提前致谢。

需要告诉

arangorestore将数据恢复到哪个数据库。这可以通过提供 --server.database 选项来实现,其方式与 arangodump 相同。 如果没有为 --server.database 提供任何值,它将默认为 _system,这意味着 arangorestore 的后续调用将分别覆盖 _system 数据库中的先前数据。

如果备份服务器上尚不存在目标数据库,则可以使用选项 --create-database true 即时创建它们。 此外,要恢复系统 collections,需要为 arangorestore 提供选项 --include-system-collections true

这意味着,如果您的数据库确实命名为 "collection" 和 "collection2",您的恢复命令应如下所示:

arangorestore --input-directory "/tmp/dump/_system/" --server.database "_system" --include-system-collections true --create-database true
arangorestore --input-directory "/tmp/dump/collection/" --server.database "collection" --include-system-collections true --create-database true
arangorestore --input-directory "/tmp/dump/collection2/" --server.database "collection2" --include-system-collections true --create-database true

另请注意,在 ArangoDB 3.5 中,arangodump 和 arangorestore 都有一个选项 --all-databases,这将大大简化备份和恢复过程。

从远程服务器或本地服务器获取转储执行命令

arangodump --server.endpoint tcp://ip_address:8529 --server.username test --server.password test --server.database dev --output-directory "dump" 

要从转储中恢复执行以下命令

arangorestore --server.endpoint tcp://ip_address:8529 --server.username test --server.password test --server.database dev --input-directory "dump"