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"
我的目标是创建 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"