备份使用mup部署的mongoDB最简单的方法是什么?
我使用备份使用mup部署的mongoDB最简单的方法是什么?,mongodb,meteor,Mongodb,Meteor,我使用mup deploy()在Ubuntu服务器上部署了我的应用程序,并在mup.json文件中选择了“setupMongo”:true 一切正常,我希望每天将mongoDB数据库保存到FTP或S3,或者将mongoDB副本设置到另一台服务器(以避免每次复制整个数据库,但这似乎更复杂)。最好的方法是将其进行mongodump 假设它在mup实例本身上运行,因为它只侦听127.0.0.1,那么您必须使用ssh-in并使用mongodump 如果您只是运行它: mongodump 它将创建一个包
mup deploy
()在Ubuntu服务器上部署了我的应用程序,并在mup.json文件中选择了“setupMongo”:true
一切正常,我希望每天将mongoDB数据库保存到FTP或S3,或者将mongoDB副本设置到另一台服务器(以避免每次复制整个数据库,但这似乎更复杂)。最好的方法是将其进行mongodump 假设它在mup实例本身上运行,因为它只侦听
127.0.0.1
,那么您必须使用ssh-in并使用mongodump
如果您只是运行它:
mongodump
它将创建一个包含备份的目录dump
如果您想远程执行此操作,您必须编辑/etc/mongodb.conf
以确保它绑定,但您必须创建用户,因为它可以公开访问。然后将auth
设置为true
然后,您可以从自己的机器mongodump
(您可以从mongodb.org下载mongodump二进制文件):
/mongodump--主机--用户名--密码
这个答案的灵感来自:
它使用一个脚本:mongodump->tar->wput(ftp)
首先,创建一个bash脚本:
#!/bin/bash
MONGO_DATABASE="your_db_name"
APP_NAME="your_app_name"
MONGO_HOST="127.0.0.1"
MONGO_PORT="27017"
TIMESTAMP=`date +%F-%H%M`
MONGODUMP_PATH="/usr/bin/mongodump"
BACKUPS_DIR="/home/username/backups/$APP_NAME"
BACKUP_NAME="$APP_NAME-$TIMESTAMP"
# mongo admin --eval "printjson(db.fsyncLock())"
# $MONGODUMP_PATH -h $MONGO_HOST:$MONGO_PORT -d $MONGO_DATABASE
$MONGODUMP_PATH -d $MONGO_DATABASE
# mongo admin --eval "printjson(db.fsyncUnlock())"
mkdir -p $BACKUPS_DIR
mv dump $BACKUP_NAME
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUP_NAME
rm -rf $BACKUP_NAME
wput $BACKUP_NAME.tgz ftp://login:password@ftp.domain.com/backups/
将其另存为mongo_backup.sh
并运行:
chmod +x mongo_backup.sh
bash mongo_backup.sh
sudo su
crontab -e
并输入这一新行:
00 00 * * * /bin/bash /home/username/scripts/mongo_backup.sh
就是这样。如果使用mup部署,您会很幸运。 您可以在此处找到以下步骤: 以下是步骤: 通过mup部署的MongoDB数据备份 只有当meteor使用mup工具部署时,这些命令才能正常运行。Mup为mongodb创建docker,因此使用这些命令进行备份变得很容易 备份 从docker备份正在运行的应用程序数据,然后从docker复制到本地文件夹
docker exec -it mongodb mongodump --archive=/root/mongodump.gz --gzip
docker cp mongodb:/root/mongodump.gz mongodump_$(date +%Y-%m-%d_%H-%M-%S).gz
将备份复制到服务器
将数据移动到另一台服务器/本地计算机或备份位置
scp /path/to/dumpfile root@serverip:/path/to/backup
从meteor部署中删除旧数据
进入docker中运行的mongo控制台,然后在获取新数据之前删除当前数据库
docker exec -it mongodb mongo appName
db.runCommand( { dropDatabase: 1 } )
将数据还原到meteor docker
谢谢你的回答。有没有一种方法可以自动完成?(例如每天晚上)@jeromematin你必须写一个cron。如果以上(答案的第一部分对您有效),您可以使用此设置:
docker exec -it mongodb mongo appName
db.runCommand( { dropDatabase: 1 } )
docker cp /path/to/dumpfile mongodb:/root/mongodump.gz
docker exec -it mongodb mongorestore --archive=/root/mongodump.gz --gzip