我已经找到了很多关于如何使用mongodump和mongorestore的良好说明,以备份我的流星生产服务器并在需要时恢复备份:
meteor mongo --url myApp.meteor.com
mongodump -u client -h production-db-b2.meteor.io:27017 -d myApp_meteor_com -out dump/2014_10_21 -p [password from meteor mongo --url]
mongorestore -u client -h production-db-b2.meteor.io:27017 -d myApp_meteor_com dump/2014_10_21_v2/myApp_meteor_com -p [password from meteor mongo --url]
我没有找到的解释是如何将备份转储恢复到我的本地流星应用程序。我的app文件夹中有一个mongodump输出。我不确定我是否可以使用mongorestore,或者我是否应该做其他事情。
答案 0 :(得分:34)
我发现最简单的方法:
cd
并执行meteor
命令 mongorestore -h 127.0.0.1 --port 3001 -d meteor dump/meteor
如果您的本地主机具有不同的IP地址并且127.0.0.1
更改为您拥有mongodb的端口(通常为3001
或3001
,则更改3002
,请尝试两者), dump/meteor
是您之前创建的转储的路径。
也是导出本地数据库的最简单方法:
cd
并执行meteor
命令 mongodump -h 127.0.0.1 --port 3001 -d meteor
再次,根据需要更改localhost ip和port。 。因此,在运行cd
之前,将在您mongodump
的文件夹中创建包含db文件的dump / meteor文件夹。
答案 1 :(得分:5)
为了实现相反的目的,将本地应用程序数据发送到生产应用程序,我编写了这个小shell脚本。当我在本地开发并且只是为同一个客户端查看同步演示时,它非常有用。请注意,它最后会--drop
覆盖您的生产数据库,请小心使用!
它处理来自meteor mongo --url ...
的客户端,pw和服务器数据,这些数据在1分钟后过期,并且在该时间内尝试复制粘贴真的很烦人。
#!/usr/bin/env bash
mongodump -h 127.0.0.1:3001 -d meteor -o ~/www/APPNAME/server/dump
IN=`meteor mongo --url APPNAME.meteor.com`
client=`echo $IN | awk -F'mongodb://' '{print $2}' | awk -F':' '{print $1}'`
echo $client
pw=`echo $IN | awk -F':' '{print $3}' | awk -F'@' '{print $1}'`
echo $pw
serv=`echo $IN | awk -F'@' '{print $2}' | awk -F'/' '{print $1}'`
echo $serv
mongorestore -u $client -h $serv -d APPNAME_meteor_com dump/meteor -p $pw --drop
答案 2 :(得分:4)
这就是我的所作所为:
予。在服务器中创建一个mongo转储
DATE=$(date +%m%d%y_%H.%M); mongodump --host localhost -d APPNAME -o /tmp/APPNAME_$DATE tar -cjvvf /tmp/APPNAME_$DATE.tar.bz2 /tmp/APPNAME_$DATE
II。在开发机器中下载转储并在/ tmp
中解压缩scp root@$HOST:/tmp/APPNAME_$DATE.tar.bz2 /tmp/ cp /tmp/APPNAME_$DATE.tar.bz2 . mkdir -p /tmp/APPNAME_$DATE cd /tmp/APPNAME_$DATE tar -xjvf /tmp/APPNAME_$DATE.tar.bz2
III。更新本地流星开发数据库
mongorestore --db meteor -h localhost --port 8082 --drop /tmp/APPNAME_$DATE/tmp/APPNAME_$DATE/APPNAME
答案 3 :(得分:3)
您可以使用mongorestore
。
它与您已经做过的几乎相同。
在第一行:meteor mongo --url myApp.meteor.com
只删除最后一部分,以便该行显示为:meteor mongo --url
。
在本地计算机上执行时,您将获得流星应用程序的本地实例的信息。从那时起,您可以使用mongorestore
以远程方式恢复本地数据库。
我习惯在mongorestore之前做一个meteor reset
,只是为了确保我的db是空的,但我不知道它是否真的有必要。
请注意,应用程序应该在运行时运行。
答案 4 :(得分:1)
我最终编写了一个脚本来下载流星数据库。请查看https://github.com/AlexeyMK/meteor-download
用法(在您应用的根目录中):
curl https://raw.github.com/AlexeyMK/meteor-download/master/download.sh > download.sh
./download.sh yourapp.meteor.com`
答案 5 :(得分:0)
我使用Google Cloud for Meteor托管,并编写了自定义脚本。
我在cronjob上运行这个备份到谷歌云存储:
https://github.com/markoshust/mongo-docker-backup-gcloud/blob/master/mongobackup.sh
#!/bin/bash
MONGO_DB=dbname
MONGO_HOST=127.0.0.1
HOST_DIR=/home/YOURNAME
BACKUP_DIR=/mongobackup
BUCKET=gs://BUCKET_NAME
DATE=`date +%Y-%m-%d:%H:%M:%S`
/usr/bin/docker run --rm \
-v $HOST_DIR/$BACKUP_DIR:$BACKUP_DIR \
markoshust/mongoclient \
mongodump --host $MONGO_HOST --db $MONGO_DB --out $BACKUP_DIR
sudo mkdir -p $HOST_DIR/$BACKUP_DIR/$MONGO_DB/$DATE
sudo mv $HOST_DIR/$BACKUP_DIR/$MONGO_DB/* $HOST_DIR/$BACKUP_DIR/$MONGO_DB/$DATE
$HOST_DIR/gsutil/gsutil rsync -r $HOST_DIR/$BACKUP_DIR $BUCKET
sudo /bin/rm -rf $HOST_DIR/$BACKUP_DIR
然后在本地恢复,我创建了另一个脚本,从谷歌云存储下载备份,在本地存储,然后进行本地恢复:
https://github.com/markoshust/mongorestore.sh/blob/master/.mongorestore.sh
#!/bin/bash
## This script syncs a mongodb backup from a Google Cloud Storage bucket and
## mongorestore's it to a local db.
##
## Author: Mark Shust <mark@shust.com>
## Version: 1.1.0
BUCKET=my-bucket-name
FOLDER=folder-name/$1
BACKUP_DIR=./.backups/
DB_NAME=localdb
DB_HOST=localhost
DB_PORT=27017
if [ -z $1 ]; then
echo 'Please specify a subdirectory to sync from...'
exit 0
fi
mkdir -p $BACKUP_DIR
if [ ! -d $BACKUP_DIR ]; then
gsutil -m cp -r gs://$BUCKET/$FOLDER $BACKUP_DIR
fi
mongorestore --db $DB_NAME -h $DB_HOST --port $DB_PORT --drop $BACKUP_DIR/$1/
echo 'Database restore complete.'
我使用Meteor,简单愚蠢并且效果很好:)只需将数据库名称切换为meteor
并将端口切换为3001
(或者您拥有的任何配置)。它与流星无关,因此适用于任何mongodb主机/平台。