为了获取 mongo 实例中的数据库名称,我们需要使用 mongo show dbs 命令。
由于我们希望能够在脚本中使用它,我们希望运行该命令并退出 mongo cli,为此我们可以将 js 文件传递给 mongo,如下所示:
$ echo "show dbs" > showDbs.js
$ mongo < showDbs.js
这将导致类似
MongoDB shell version v3.4.22
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.22
admin 0.000GB
animals 0.366GB
people 0.012GB
local 0.000GB
bye
由于我们需要解析结果,我们可以使用--quiet 选项来减少输出。我们也可以跳过创建showDbs.js 文件,这样我们以后就不必清理它了。
现在我们有:
$ mongo --quiet <<< "show dbs"
admin 0.000GB
animals 0.366GB
people 0.012GB
local 0.000GB
剩下要做的就是解析结果以删除数据库大小,然后为每个数据库运行mongodump 命令(我将保留该命令)
要删除每个数据库的大小信息,我们将使用 sed 并匹配空格,因为数据库名称中不允许使用空格
$ sed 's/\s\+.\+//' <<< "$dbs"
将它们放在一起,我们得到以下脚本
#!/bin/bash
dbs=$(mongo --quiet <<< "show dbs")
dbs=$(sed 's/\s\+.\+//' <<< "$dbs")
for db in $dbs; do
mongodump --host hostname --port portname --username username --password password --authenticationDatabase admin --db $db --archive=$db.archive
done