-
-
Save fvbock/5bec51668371d045164ef455ff12b19e to your computer and use it in GitHub Desktop.
Backup and restore MongoDB running in a Docker container
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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