【问题标题】:How to dump all databases with ArangoDB如何使用 ArangoDB 转储所有数据库
【发布时间】:2018-05-31 02:22:13
【问题描述】:
我在本地运行 ArangoDB,其中包含来自多个不同项目的数据库、集合、数据和图表。我想备份所有内容,以便重建系统。我知道如何备份单个数据库,但因为我有一堆我希望一次性完成。
基本上,我正在寻找 ArangoDB 等价于
mysqldump -u root -p --all-databases > alldb.sql
显然是 ArangoDB 的等价物
mysql -u root -p < alldb.sql
也很高兴知道。
【问题讨论】:
标签:
arangodb
database-backups
【解决方案1】:
从 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
如果有一个用户拥有所有数据库的访问权限,这将起作用。
【解决方案2】:
虽然前面的脚本几乎是正确的,但它不适用于多个数据库,因为它会开始抱怨转储目录,并要求您将--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
【解决方案3】:
我遇到了这个帖子,看到有一堆自定义解决方案。只是想提一下:
从 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,不能同时使用 --all-databases 和 --server.database 两个选项调用 arangorestore。此外,选项 --force-same-database 不能与 --all-databases 一起使用。
如果目标服务器上不存在要恢复的数据库,则将数据恢复到其中将失败,除非还为 arangorestore 指定了选项 --create-database。请注意,在这种情况下,必须使用有权访问 _system 数据库的数据库用户,以便在恢复时创建数据库。
参考:https://www.arangodb.com/docs/stable/release-notes-new-features35.html#dump-and-restore-all-databases