首页 > 解决方案 > ArangoDB - 备份和恢复所有数据

问题描述

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

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

在起源上,我对每个数据库进行转储:

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用户获取集合(没有其他用户,没有数据库)。

我究竟做错了什么?如何进行完整备份和还原?

提前致谢。

标签: databasearangodbdatabase-backups

解决方案


arangorestore需要告知要将数据恢复到哪个数据库。这可以通过以--server.database与为arangodump. 如果没有为其提供值,--server.database它将默认为_system,这意味着对 arangorestore 的后续调用将分别覆盖_system数据库中的先前数据。

如果备份服务器上尚不存在目标数据库,则可以使用选项动态创建它们--create-database true。此外,要恢复系统集合,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 中,--all-databasesarangodump 和 arangorestore 都有一个选项,这将大大简化备份和恢复过程。


推荐阅读