MongoShell只有备份单个数据库的脚本,那如何备份整个数据库呢,其实很简单,我们只需要拿到MongoDB的所有库名,做一个遍历就可以了

MongoDB获得所有数据库使用命令show dbs;那如何不进入MongoDB获得所有数据库名呢

可以使用 mongo 命令的 --quiet 选项,结合 JavaScript 表达式来执行 show dbs。如下:

mongo -h <hostname> -u <username> -p <password> --quiet --eval "db.adminCommand('listDatabases').databases.forEach(function(d){print(d.name)})"

这样获取出来的命令会待数据库名称以及数据困的大小, 我们用awk分割一下,取第一个就是我们想要的结果了。甚至还可以用grep命令来筛选不需要备份的数据库

完整脚本如下:

for db in `mongo -h <hostname> -u <username> -p <password> --quiet --eval "db.adminCommand('listDatabases').databases.forEach(function(d){print(d.name)})" | awk '{print $1}'`; do echo "Start backup $db"; mongodump -h <hostname> -u <username> -p <password>  --authenticationDatabase admin --out <backup_directory>; done

需要替换的参数

  • hostname: mongo数据库的地址

  • port: mongo数据库的密码

  • username: mongo数据库的用户名

  • password: mongo数据库的密码

  • backup_directory:备份的路径