Skip to content

Instantly share code, notes, and snippets.

@SuperPaintman
Last active September 13, 2016 01:37
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 SuperPaintman/b94d59e3f0821bd9e18bc3c5634f5bcb to your computer and use it in GitHub Desktop.
Save SuperPaintman/b94d59e3f0821bd9e18bc3c5634f5bcb to your computer and use it in GitHub Desktop.
Backup a MongoDB database using Git
#!/bin/bash
#
# Author: SuperPaintman <SuperPaintmanDeveloper@gmail.com>
#
# Export
# Init
me=$(basename "$0")
RETVAL=0
# Temp files
temp_files=()
trap_finish () {
for temp_file in "${temp_files[@]}"; do
rm "$temp_file"
done
}
trap "trap_finish; exit" EXIT
# Help
show_help () {
cat <<EOF
Usage: $me <database_name>
EOF
}
# Args
args=()
while [[ $# -gt 0 ]]; do
arg="$1"
shift
case $arg in
-h|--help)
show_help
exit $RETVAL
;;
-*|--*)
echo -e "Unrecognized argument: $arg"
exit 1
;;
*)
args+=("$arg")
;;
esac
done
# Params
database_name="${args[0]}"
if [ ${#args[@]} -ne 1 ]; then
show_help
exit 1
fi
rm -fr "${database_name}"
mongodump --db "${database_name}" \
-u "$MONGO_USERNAME" \
-p "$MONGO_PASSWORD" \
-o ./
cd "${database_name}"
for i in *.bson; do
bsondump --pretty "$i" > "$(basename "$i" .bson).json"
done
rm *.bson
for i in *.metadata.json; do
temp_file="$(mktemp)"
temp_files+=("$temp_file")
cat "$i" | python -c '
import sys, json
print json.dumps(
json.loads(sys.stdin.read()),
sort_keys = True,
indent = 8)
' > "$temp_file"
cp -f "$temp_file" "$i"
done
cd ..
exit $RETVAL
#!/bin/bash
#
# Author: SuperPaintman <SuperPaintmanDeveloper@gmail.com>
#
# Import
# Init
me=$(basename "$0")
RETVAL=0
# Help
show_help () {
cat <<EOF
Usage: $me <database_name>
EOF
}
# Args
args=()
while [[ $# -gt 0 ]]; do
arg="$1"
shift
case $arg in
-h|--help)
show_help
exit $RETVAL
;;
-*|--*)
echo -e "Unrecognized argument: $arg"
exit 1
;;
*)
args+=("$arg")
;;
esac
done
# Params
database_name="${args[0]}"
if [ ${#args[@]} -ne 1 ]; then
show_help
exit 1
fi
cd "${database_name}"
mongorestore --db "${database_name}" -u "$MONGO_USERNAME" -p "$MONGO_PASSWORD" ./
for i in $(ls | grep -v 'metadata\.json'); do
mongoimport --db "${database_name}" \
-c "$(basename "$i" .json)" \
-u "$MONGO_USERNAME" \
-p "$MONGO_PASSWORD" \
"$i"
done
cd ..
exit $RETVAL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment