#!/usr/bin/env bash
# Usage: ./backup-server.sh SERVER_IP
set -euo pipefail

host="$1"
out="backup-$host-$(date +%Y-%m-%d).tar.gz"

ssh "root@$host" 'bash -s' > "$out" <<'REMOTE'
cd /
dump_dir=/root/db-dumps
mkdir -p -m 700 "$dump_dir"

if command -v mysqldump >/dev/null; then
	mysqldump --all-databases --single-transaction --routines --events --triggers > "$dump_dir/mysql.sql"
fi
if command -v pg_dumpall >/dev/null; then
	runuser -u postgres -- pg_dumpall > "$dump_dir/postgres.sql"
fi

tar -czpf - --one-file-system --warning=no-file-changed \
	--exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run \
	--exclude=/tmp --exclude=/mnt --exclude=/media --exclude=/lost+found \
	--exclude=/swap.img \
	--exclude=/var/lib/mysql --exclude=/var/lib/postgresql \
	/

rm -rf "$dump_dir"
REMOTE

gzip -t "$out"
echo "Saved $out"
