You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.4 KiB
49 lines
1.4 KiB
#!/bin/bash
|
|
|
|
[ "$MONGO_HOST" ] || {
|
|
echo "You must define \$MONGO_HOST variable." >&2
|
|
exit 1
|
|
}
|
|
|
|
|
|
mongo_databases() {
|
|
echo "show dbs" | mongo --quiet --host "$MONGO_HOST" | cut -f 1 -d " "
|
|
}
|
|
|
|
dbs=$(mongo_databases)
|
|
|
|
BACKUP_ROOT=/var/backups/mongo
|
|
mkdir -p "$BACKUP_ROOT"
|
|
for db in $dbs; do
|
|
if [[ "$db" == "local" || "$db" == "config" ]]; then
|
|
continue
|
|
fi
|
|
for exclude_db in $exclude_dbs; do
|
|
if [ "$exclude_db" == "$db" ]; then
|
|
echo "No backup for database $db as it is listed in 'exclude-dbs'."
|
|
continue 2
|
|
fi
|
|
done
|
|
|
|
dst="$BACKUP_ROOT/$db"
|
|
[ -d "$dst.old" ] && rm -rf "$dst.old"
|
|
[ -d "$dst" ] && mv "$dst" "$dst.old"
|
|
mkdir -p "$dst.inprogress"
|
|
(( start = SECONDS ))
|
|
echo "Dumping database $db..." >&2
|
|
mongodump --host "$MONGO_HOST" --db "$db" --out "$dst.inprogress" &&
|
|
mv "$dst.inprogress/$db/"* "$dst.inprogress/" &&
|
|
rmdir "$dst.inprogress/$db"
|
|
errlvl="${PIPESTATUS[0]}"
|
|
(( elapsed = SECONDS - start ))
|
|
if [ "$errlvl" != "0" ]; then
|
|
echo " !! Error when dumping database $db." >&2
|
|
rm -rf "$dst.inprogress" &&
|
|
[ -d "$dst.old" ] && rm -rf "$dst.old"
|
|
else
|
|
mv "$dst.inprogress" "$dst"
|
|
[ -d "$dst.old" ] && rm -rf "$dst.old"
|
|
printf " ..dumped %-35s (%12s in %10s)\n" "$db" "$(du -sh "$dst" | cut -f 1)" "${elapsed}s" >&2
|
|
fi
|
|
done
|
|
|