Mongorestore, от сервера производства метеоров до локальных
Я нашел много хороших инструкций о том, как использовать 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 или есть что-то еще, что я должен делать.
6 ответов
Самый простой способ, который я нашел:
cd
в вашем проекте и выполнитьmeteor
команда- в другом терминале:
mongorestore -h 127.0.0.1 --port 3001 -d meteor dump/meteor
менять 127.0.0.1
если ваш localhost имеет другой IP-адрес и 3001
в порт у вас есть mongodb (обычно это 3001
или же 3002
так что попробуйте оба), dump/meteor
путь к дампу, который вы создали ранее.
Также самый простой способ экспортировать локальную базу данных:
cd
в вашем проекте и выполнитьmeteor
команда- В другом терминале:
mongodump -h 127.0.0.1 --port 3001 -d meteor
снова измените localhost ip и порт, если это необходимо., В результате в папке, в которую вы cd
перед запуском mongodump
,
Удачи.
Чтобы добиться обратного, отправляя данные локального приложения в производственное приложение, я написал этот небольшой сценарий оболочки. Это было полезно, пока я работаю локально и просто синхронизировал демо для просмотра клиентом. Обратите внимание, что это имеет --drop
в конце, который перезапишет вашу производственную базу данных, используйте с осторожностью!
Он заботится о данных клиента, pw и сервера от 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
Вот что я делаю:
I. Создать дамп монго на сервере
ДАТА =$(дата +% 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
Ты можешь использовать mongorestore
,
Это почти то же самое, что вы уже сделали.
В вашей первой строке: meteor mongo --url myApp.meteor.com
просто удалите последнюю часть, чтобы строка читалась так: meteor mongo --url
, При выполнении на локальном компьютере вы получите информацию для локального экземпляра вашего метеорного приложения. С этого момента вы можете просто использовать mongorestore
восстановить вашу локальную базу данных, как вы уже сделали удаленно.
Я использую, чтобы сделать meteor reset
до магазина, чтобы быть уверенным, что моя база данных пуста, но я не знаю, действительно ли это необходимо.
Обратите внимание, что приложение должно работать при этом.
В итоге я написал скрипт для загрузки базы метеоров. Проверьте это на https://github.com/AlexeyMK/meteor-download
Использование (в корне вашего приложения):
curl https://raw.github.com/AlexeyMK/meteor-download/master/download.sh > download.sh
./download.sh yourapp.meteor.com`
Я использую Google Cloud для хостинга Meteor и написал собственные сценарии.
У меня это работает на cronjob для резервного копирования в облачное хранилище Google:
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
Затем для локального восстановления я создал другой скрипт, который загружает резервную копию из облачного хранилища Google, сохраняет ее локально, а затем выполняет локальное восстановление:
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.