我在本地运行 ArangoDB,其中包含来自多个不同项目的数据库、集合、数据和图表。我想备份所有内容,以便重建系统。我知道如何备份单个数据库,但因为我有一堆数据库,所以我希望一次性完成此操作。
本质上,我正在寻找相当于
的ArangoDBmysqldump -u root -p --all-databases > alldb.sql
显然 ArangoDB 相当于
mysql -u root -p < alldb.sql
也很高兴知道。
从 3.3 版本开始,arangodump 不支持一次转储所有数据库。这是每个数据库的。
要使其转储所有数据库,可以在所有数据库上循环调用它,例如
# loop over all databases
for db in `arangosh --javascript.execute-string "db._databases().forEach(function(db) { print(db); });"` # host, user and password go here...
do
arangodump --sever.database "$db" # host, user and password go here...
done
如果有一个用户拥有所有数据库的访问权限,这将起作用。
虽然前面的脚本几乎是正确的,但它不适用于多个数据库,因为它会开始抱怨转储目录,并要求您将
--overwrite true
添加到命令中。这也不会起作用,因为它只会输出最新的数据库。
我们使用以下脚本,该脚本与 stj 的答案略有不同(或者至少以下是备份过程的一部分)来获取我们拥有的所有数据库的转储:
USER=...
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 ~/dump/"$db" --overwrite true --server.username "$USER" --server.password "$PASSWORD" --server.database "$db"
done
我遇到了这个线程,发现有很多自定义解决方案。只是想提一下:
从 Arango v.3.5.0 开始,arangodump(以及 arangorestore)支持
--all-databases true
参数
arangodump 有一个选项 --all-databases 来转储所有可用的数据库,而不是仅通过选项 --server.database 指定的单个数据库。
设置为 true 时,这会使 arangodump 转储当前用户有权访问的所有可用数据库。选项 --all-databases 不能与选项 --server.database 结合使用。
当使用--all-databases时,arangodump将创建一个子目录,其中包含每个转储数据库的数据。数据库将被一个接一个地转储。但是,在每个数据库内部,可以使用多个线程并行转储数据库的集合。转储所有数据库时,arangodump 的一致性保证与单独转储多个单个数据库时相同,因此转储不提供数据的跨数据库一致性。
arangorestore 有一个选项 --all-databases 使其从指定转储目录的子目录中恢复所有数据库,而不是仅通过选项 --server.database 指定的单个数据库。
使用 arangorestore 选项仅对使用 arangodump 和 --all-databases 选项创建的转储有意义。对于 arangodump,arangorestore 不能同时使用 --all-databases 和 --server.database 这两个选项调用。此外,选项 --force-same-database 不能与 --all-databases 一起使用。
如果目标服务器上不存在要恢复的数据库,则除非为arangorestore也指定了选项--create-database,否则恢复数据将失败。请注意,在这种情况下,必须使用有权访问 _system 数据库的数据库用户,以便在恢复时创建数据库。
转储全部使用
arangodump --all-databases true
,您可以使用arangorestore --all-databases true
恢复它。