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

mongodump and restore with docker

by 혜룐 2019. 8. 21.

mongodump and restore with docker

덤프

./script phase databasename dump

리스토어

./script phase databasename restore

[me@server001 scripts]$ cat db-backup.sh
#!/bin/bash
#by catherine.lee

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

dumpDB() {
	PHASE=${1}
	DATABASE=${2}
	DB_DUMP_DIR=${3}
	DB_HOST="server-hostname"
	DB_PORT="27017"
	DB_USER="user"
	DB_PWD="pwd"
	AUTH_CMD=""
	if [ $PHASE == "sandbox" ];then
		DB_HOST="sandbox-server-hostname"
	fi
	if [ $PHASE == "stage" ];then
		DB_HOST="server-stage-hostname"
		DB_PWD="password"
		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}"
}

getDockerContainerId() {
	DOCKER_MONGO_ID=`sudo docker ps -a | grep mongo | awk -F" " '{print $1}'`
	echo "${DOCKER_MONGO_ID}"

}

runDocker() {
	sudo docker stop mongo; sleep 2 ; sudo docker rm mongo; sleep 2
	sudo docker run -it --name mongo --net host -v /home/server/backup/:/db_backup -d mongo:3.6.11
	sleep 2
	DOCKER_MONGO_ID=`sudo docker ps -a | grep mongo | awk -F" " '{print $1}'`
	echo "${DOCKER_MONGO_ID}"
}

restoreDB() {
	#$ sudo docker exec mongo /bin/bash -c 'mongorestore -d bla /db_backup/stage/foo/foo'

	PHASE=${1}
	DATABASE=${2}
	DB_DUMP_DIR=${3}
	COMMAND="mongorestore -d ${DATABASE} /db_backup/${PHASE}/${DATABASE}/${DATABASE}/"
	DOCKER_MONGO_ID=`runDocker`
	sudo docker exec mongo /bin/bash -c "${COMMAND}"
}

main(){
	EXEC_COMMAND=${3}
	if [ $EXEC_COMMAND == "dump" ];then
		echo "---- command : ${3}, phase : ${1}, database : ${2}"
		makeDir ${BK_HOME}/${1}/${2}
		dumpDB ${1} ${2} ${BK_HOME}/${1}/${2}
	else
		echo "---- command : ${3}, phase : ${1}, database : ${2}"
		restoreDB ${1} ${2} ${BK_HOME}/${1}/${2}
	fi
}

#sys.arg=1 phase arg=2 arg=3 dump/restore databasename bla/foo
main ${1} ${2} ${3}