从Meteor生产服务器到本地的Mongorestore

23

我已经找到了大量关于如何使用mongodump和mongorestore的良好说明,以备份我的Meteor生产服务器并在需要时恢复备份:

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]

我还没有找到的解释是如何将备份转储文件恢复到我的本地 Meteor 应用程序中。我在应用程序文件夹中有一个 mongodump 输出。我不确定是否可以使用 mongorestore,或者是否还有其他事情需要做。

6个回答

39

我发现的最简单的方法:

  1. cd 进入你的项目并执行 meteor 命令
  2. 在另一个终端中:

mongorestore -h 127.0.0.1 --port 3001 -d meteor dump/meteor

如果你的本地主机有不同的IP地址,需要更改127.0.0.1,如果你的mongodb端口号不是3001,也需要更改此处,一般使用的端口是30013002,所以请尝试两个端口。 dump/meteor 是之前创建的转储路径。

还有一种导出本地数据库的最简单的方式:

  1. cd 进入你的项目并执行 meteor 命令
  2. 在另一个终端中:

mongodump -h 127.0.0.1 --port 3001 -d meteor

如果需要,再次更改localhost ip和port。作为结果,将在运行mongodump之前进入的文件夹中创建名为dump/meteor 的包含数据库文件的文件夹。

祝你好运。


3
补充一下,如果你的mac电脑上没有安装mongo数据库,你可以执行以下命令:brew install mongo - Julian K
请查看本地Meteor应用程序使用的端口号 - 它位于文件.meteor/local/db/METEOR-PORT中。 - AntonAL

6
为了实现将本地应用程序数据发送到生产应用程序的相反效果,我编写了这个小的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

5
这是我做的事情:
I. 在服务器上创建一个Mongo dump
    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. 下载dump并解压到本地开发机器的/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. 更新本地Meteor开发数据库
    mongorestore --db meteor  -h localhost --port 8082 --drop /tmp/APPNAME_$DATE/tmp/APPNAME_$DATE/APPNAME

4
您可以使用mongorestore命令。这与您已经执行的操作非常相似。
在您的第一行命令中:meteor mongo --url myApp.meteor.com,只需删除最后一部分,使该行读作:meteor mongo --url。在本地计算机上执行此命令后,您将获得Meteor应用程序的本地实例信息。从那时起,您可以像远程恢复数据库一样使用mongorestore命令来恢复本地数据库。
我通常在执行mongorestore命令之前使用meteor reset命令,以确保我的数据库为空,但我不知道是否必须这样做。
请注意,在执行此操作时,应用程序应该正在运行。

1

最终我编写了一个脚本来下载Meteor数据库。请访问https://github.com/AlexeyMK/meteor-download查看。

使用方法(在您的应用程序根目录下):

curl https://raw.github.com/AlexeyMK/meteor-download/master/download.sh > download.sh        
./download.sh yourapp.meteor.com`

0

我正在使用Google Cloud进行Meteor托管,并编写了自定义脚本。

我将其运行在cronjob上,以备份到Google Cloud存储中:

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(或您所拥有的任何配置)。它是与Meteor无关的,因此可以与任何mongodb主机/平台一起使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接