【发布时间】:2019-10-04 14:58:39
【问题描述】:
我使用 mup deploy (https://github.com/arunoda/meteor-up) 在 Ubuntu 服务器上部署我的应用程序,并在 mup.json 文件中使用选项 "setupMongo": true。
一切正常,我想每天将 mongoDB 数据库保存到 FTP 或 S3,或者将 mongoDB 副本设置到另一台服务器(避免每次都复制整个数据库,但似乎更复杂)。
【问题讨论】:
我使用 mup deploy (https://github.com/arunoda/meteor-up) 在 Ubuntu 服务器上部署我的应用程序,并在 mup.json 文件中使用选项 "setupMongo": true。
一切正常,我想每天将 mongoDB 数据库保存到 FTP 或 S3,或者将 mongoDB 副本设置到另一台服务器(避免每次都复制整个数据库,但似乎更复杂)。
【问题讨论】:
如果使用 mup 部署,那么你很幸运。 你可以在这里找到步骤:https://github.com/xpressabhi/mup-data-backup
下面是步骤:
只有在使用 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
进入在 docker 中运行的 mongo 控制台,然后在获取新数据之前删除当前数据库。
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
【讨论】:
最好的方法是 mongodump 。
假设它在 mup 实例本身上运行,因为它只侦听 127.0.0.1,您将不得不 ssh 并使用 mongodump。
如果你只是运行它:
mongodump
它将创建一个目录dump 包含您的备份。
如果您想远程执行此操作,您必须编辑/etc/mongodb.conf 以确保它绑定globally,但您必须创建用户,因为它可以公开访问。然后将auth设置为true。
然后您可以在自己的机器上mongodump(您可以从 mongodb.org 下载 mongodump 二进制文件):
./mongodump --host <your server ip address> --username <username> --password <password>
【讨论】:
这个答案的灵感来自: sheharyar.me/blog/regular-mongo-backups-using-cron
它使用脚本来: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
就是这样。
【讨论】: