Skip to content

Instantly share code, notes, and snippets.

@quocnguyen
Forked from stanislavb/mongoconsole.sh
Created June 29, 2017 15:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save quocnguyen/581604f59643fc5d0a766f024044b45f to your computer and use it in GitHub Desktop.
Save quocnguyen/581604f59643fc5d0a766f024044b45f to your computer and use it in GitHub Desktop.
Backup and restore MongoDB running in a Docker container
#!/bin/bash
usage() {
echo "Usage $0 -c mongo_docker_container_name"
}
while [[ $# > 1 ]]
do
key="$1"
case $key in
-c|--container)
CONTAINERNAME="$2"
shift # past argument
;;
*)
usage
exit 1
;;
esac
shift # past argument or value
done
if [ -z "${CONTAINERNAME}" ]; then
usage
exit 1
fi
# -i interactive
# -t open TTY
# --rm remove container after use
# --name name of our temporary container
# --link map server container to hostname within client container
# mongo use official mongo image
# command line to run:
# mongo --host <hostname>
docker run -it --rm --name mongoconsole --link ${CONTAINERNAME}:${CONTAINERNAME} mongo mongo --host ${CONTAINERNAME}
#!/bin/bash
usage() {
echo "Usage $0 -c mongo_docker_container_name -db db_name"
}
while [[ $# > 1 ]]
do
key="$1"
case $key in
-db|--database)
DBNAME="$2"
shift # past argument
;;
-c|--container)
CONTAINERNAME="$2"
shift # past argument
;;
*)
usage
exit 1
;;
esac
shift # past argument or value
done
if [ -z "${DBNAME}" -o -z "${CONTAINERNAME}" ]; then
usage
exit 1
fi
docker run -it --name mongodump --link ${CONTAINERNAME}:${CONTAINERNAME} mongo mongodump --db ${DBNAME} --host ${CONTAINERNAME}
docker cp mongodump:dump ./mongodump-$(date --iso-8601)
if [ $? -ne 0 ]; then
echo "MongoDB did not succeed taking a backup. Did you specify the correct database name?"
fi
# Clean up container
docker rm mongodump
#!/bin/bash
# Use > 1 to consume two arguments per pass in the loop (e.g. each
# argument has a corresponding value to go with it).
# Use > 0 to consume one or more arguments per pass in the loop (e.g.
# some arguments don't have a corresponding value to go with it)
usage() {
echo "Usage $0 -d /mongodump/dir -c mongo_docker_container_name"
}
while [[ $# > 1 ]]
do
key="$1"
case $key in
-d|--dump)
DUMPDIR="$2"
shift # past argument
;;
-c|--container)
CONTAINERNAME="$2"
shift # past argument
;;
*)
usage
exit 1
;;
esac
shift # past argument or value
done
if [ -z "${DUMPDIR}" -o -z "${CONTAINERNAME}" ]; then
usage
exit 1
fi
echo "Attempting to restore mongodb dump at ${DUMPDIR} into container ${CONTAINERNAME}"
read -r -p "Is this what you want? [y/N] " response
case $response in
[yY][eE][sS]|[yY])
docker run -it --rm --name mongorestore -v ${DUMPDIR}:/var/dump --link ${CONTAINERNAME}:${CONTAINERNAME} mongo mongorestore --host ${CONTAINERNAME} /var/dump
;;
*)
echo "Nevermind then"
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment