【问题标题】:Mongorestore, from meteor production server to localMongorestore,从流星生产服务器到本地
【发布时间】:2018-05-22 17:33:38
【问题描述】:

我找到了很多关于如何使用 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 或者是否还有其他我应该做的事情。

【问题讨论】:

    标签: mongodb meteor mongodump mongorestore


    【解决方案1】:

    我发现的最简单的方法:

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

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

    如果你的 localhost 有不同的 ip 地址和 3001 更改 127.0.0.1 到你有 mongodb 的端口(通常是 30013002,所以尝试两者),dump/meteor 是一个路径您之前创建的转储。

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

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

    mongodump -h 127.0.0.1 --port 3001 -d meteor

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

    祝你好运。

    【讨论】:

    • 补充一下,如果你的mac上没有安装mongo,你可以这样做:brew install mongo
    • 查看端口号,您的本地流星应用程序正在使用 - 它位于文件.meteor/local/db/METEOR-PORT
    【解决方案2】:

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

    它会处理来自meteor mongo --url ... 的客户端、密码和服务器数据,这些数据会在 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
    

    【讨论】:

      【解决方案3】:

      这就是我的工作:

      我。在服务器中创建一个 mongo 转储

      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

      【讨论】:

        【解决方案4】:

        您可以使用mongorestore

        这和你已经做的差不多。

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

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

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

        【讨论】:

          【解决方案5】:

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

          用法(在您应用的根目录中):

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-04-23
              • 2013-01-19
              • 2015-03-03
              • 1970-01-01
              • 2015-05-17
              • 2015-10-07
              • 1970-01-01
              • 2016-04-08
              相关资源
              最近更新 更多