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:备份的路径