본문 바로가기
데이터베이스

mongodump and mongorestore

by 혜룐 2019. 8. 19.

덤프 하고 리스토어 해보자.

bla라는 데이터베이스를 덤프 한다.

/usr/local/mongodb-linux-x86_64-3.4.7/bin/mongodump -d bla -h alpha-mong-server-host --port 27017

user / password가 있다면 아래처럼 덤프 할수있다.

/usr/local/mongodb-linux-x86_64-3.4.7/bin/mongodump -d databasename -h mongodb-server-hostname -u username -p 'password' --authenticationDatabase=admin

덤프시,  -o  옵션을 이용해 특정디렉터리에 넣을수있다. 

아래는 phase별 데이터베이스를 덤프 와 tar.gz 으로 압축하는 스크립트다.

bla라는 데이터베이스를 덤프해보자.

./script alpha bla(=dataasename 을 넣는다)

#!/bin/bash
#by catherine

MONGO_HOME=/usr/local/mongodb-linux-x86_64-3.4.7
date_str=`date +"%Y-%m-%d_%H_%M"`
BK_HOME=/backup
BK_TAR_NAME=foo-mongo-dump-$date_str.tar.gz

dumpDb() {
	PHASE=${1}
	DATABASE=${2}
	DB_DUMP_DIR=${3}
	DB_HOST="alpha-catherine-db.server-hostname"
	DB_PORT="27017"
	DB_USER="foo"
	DB_PWD="password"
	AUTH_CMD=""
	if [ $PHASE == "alpha" ];then
		DB_HOST="alpha-catherine-db.server-hostname"
	fi
	if [ $PHASE == "stage" ];then
		DB_HOST="catherine-stage1.server-hostname"
		DB_PWD="password2"
		AUTH_CMD=" -u ${DB_USER} -p ${DB_PWD} --authenticationDatabase=admin"
	fi

	echo "---- dump start : ${DB_DUMP_DIR}"
	echo "${MONGO_HOME}/bin/mongodump -d $DATABASE -h $DB_HOST --port $DB_PORT ${AUTH_CMD} -o ${DB_DUMP_DIR}"
	$MONGO_HOME/bin/mongodump -d $DATABASE -h $DB_HOST --port $DB_PORT ${AUTH_CMD} -o ${DB_DUMP_DIR}
	echo "---- dump done : ${DB_DUMP_DIR}"


	echo "---- tar.gz start : ${DB_DUMP_DIR} tar_name: ${BK_TAR_NAME}"
	cd ${DB_DUMP_DIR}
	tar cvfz ${DB_DUMP_DIR}/${BK_TAR_NAME} ${DATABASE}
	echo "---- tar.gz done: ${DB_DUMP_DIR}"

	deleteLog ${DB_DUMP_DIR}
}


makeDir() {
	echo "---- madir dump start : ${1}"
    if ! [ -d ${1} ];then
        sudo mkdir -p -m 777 ${1}
    fi
	echo "---- madir dump done"
}

deleteLog() {
	echo "---- start to delete old tar.gz : ${1}"
    	find ${1} -name "*.tar.gz" -type f -ctime +3 -exec rm -rf {} \;
	echo "---- finish to delete old tar.gz : ${1}"
}

main(){
	makeDir ${BK_HOME}/${1}/${2}
	dumpDb ${1} ${2} ${BK_HOME}/${1}/${2}
}

#sys.arg=1 phase arg=2 databasename
main ${1} ${2}

 

 리스토어 해보자.

bla데이터베이스를 위에서 받은 덤프파일로 리스토어 해보자.

$ /usr/local/mongodb-linux-x86_64-3.4.7/bin/mongorestore -d bla /backup/alpha/bla/

제대로 리스토어 되었는지 로컬몽고에 접속해보자

$ /usr/local/mongodb-linux-x86_64-3.4.7/bin/mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.11
WARNING: shell and server versions do not match
Server has startup warnings:
2019-08-19T06:46:04.912+0000 I CONTROL  [initandlisten]
2019-08-19T06:46:04.912+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-08-19T06:46:04.912+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-08-19T06:46:04.912+0000 I CONTROL  [initandlisten]
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
bla  0.146GB
> use bla
switched to db bla
> show tables;
action
users
contents
> use bla
switched to db bla
> db.users.findOne();
{
	"_id" : ObjectId("69891bdb4dd7d2a36fda824b"),
	"email" : "a.a@gmail.com",
	"name" : "aaaaa,
}

 

끝~