How to dump MongoDB database by SSH?

ssh mongo mongodb dump restore transfer

Mainly for development purposes I was in need to easily transfer selected databases from production server to my development machine. This can be done with mongodump and mongorestore commands. The mongodump by default dumps selected database with -d parameter to dump directory. Then this folder can be compressed, transferred to local host, extracted and then finally restored. This tasks might be quite time consuming and cumber-stone. After reading MongoDB documentation i turned out that the MongoDB dump/restore commands can cooperate with each other allowing simultaneous exporting database from remote host and loading it to local machine. And it will also compress transferred data with gzip additionally speeding up operation. In short, the database can be piped through interwebs!

TLDR; Bash Script

To make task easy, I've made bash script for transferring databases. The username and host for remote machine is hardcoded in script, so you can either change it or modify script to add those as parameters when calling.

#!/bin/bash
usage="Usage: sync-db <source-db-name> <target-db-name>"
host="example.com"
user="peter"
if [[ ! "$1" ]]; then
        echo "Source DB name missing"
        echo "$usage"
        exit
fi

if [[ ! "$2" ]]; then
        echo "Target DB name missing"
        echo "$usage"
        exit
fi
src=$1
trg=$2

echo "Piping "$src" database to "$trg" through interwebs..."
ssh "$user@$host" "mongodump --quiet --archive --gzip -d "$src"" | mongorestore --archive --gzip --drop

echo "Done."
crystal-kwok-XUEdfpPIhXg-unsplash.jpg