database - 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用户获取集合(没有其他用户,没有数据库)。
我究竟做错了什么?如何进行完整备份和还原?
提前致谢。
解决方案
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-databases
arangodump 和 arangorestore 都有一个选项,这将大大简化备份和恢复过程。
推荐阅读
- python - 在 keras 中训练多类输入输出
- grep - 针对文件的 phpass 哈希列表
- javascript - TypeError:通过express发送数组时将循环结构转换为JSON
- vb.net - VB.NET - 如何创建通知弹出窗口(从底部开始)
- javascript - Javascript. How to check if a false boolean parameter is passed in a function?
- python - 修改 dateutil.parser.parse 参数以纠正日期错误识别
- android - 膨胀布局的根的可见性随着孩子的可见性而变化
- python - dict.items() 返回的列表中元素的顺序是否始终相同?
- android - 在Android上将inputtype设置为numberPassword时如何强制使用数字键盘
- r - 从R中的滞后值填充缺失值