23

我找到了很多关于如何使用 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]

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

4

6 回答 6

38

我发现的最简单的方法:

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

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

127.0.0.1如果您的 localhost 具有不同的 ip 地址并且更改3001为具有 mongodb 的端口(通常是30013002,因此请尝试两者),dump/meteor是您之前创建的转储的路径。

也是导出本地数据库的最简单方法:

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

mongodump -h 127.0.0.1 --port 3001 -d meteor

再次,如果需要,更改 localhost ip 和端口。. 因此,带有 db 文件的 dump/meteor 文件夹将cd在运行之前在您的文件夹中创建mongodump

祝你好运。

于 2015-01-21T11:43:30.770 回答
6

为了完成相反的操作,将本地应用程序数据发送到生产应用程序,我编写了这个小 shell 脚本。当我在本地开发并且只是让演示同步以供客户查看时,它很有用。请注意,它--drop最后会覆盖您的生产数据库,请小心使用!

它负责处理 1 分钟后过期的客户端、密码和服务器数据,并且meteor mongo --url ...在这段时间内尝试复制粘贴真的很烦人。

#!/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
于 2014-05-14T04:38:56.550 回答
5

这就是我所做的:

一、在服务器创建一个mongo dump

    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

二、在开发机下载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

三、更新本地流星开发数据库

    mongorestore --db meteor -h localhost --port 8082 --drop /tmp/APPNAME_$DATE/tmp/APPNAME_$DATE/APPNAME

于 2013-10-22T07:54:02.830 回答
4

您可以使用mongorestore.

这和你已经做过的几乎一样。

在您的第一行中:meteor mongo --url myApp.meteor.com只需删除最后一部分,以便该行将显示为:meteor mongo --url。在本地机器上执行时,您将获得流星应用程序本地实例的信息。从那时起,您可以使用mongorestore远程方式恢复本地数据库。

meteor reset曾经在 mongorestore 之前做一个,只是为了确保我的数据库是空的,但我不知道它是否真的有必要。

请注意,执行此操作时应用程序应该正在运行。

于 2013-10-22T05:47:01.550 回答
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`
于 2013-11-13T01:29:44.843 回答
0

我正在使用 Google Cloud 进行 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 主机/平台。

于 2016-05-19T17:22:32.770 回答