bitcoiner.social/scripts/backups/functions.sh

45 lines
1.9 KiB
Bash

TIMESTAMP=$(date +%m-%d-%Y)
TIMESTAMP=$(date +%Y-%m-%d)
BACKUP_PG_DB() {
BACKUP_DIR=$HOME/archive/${TARGET}/postgresql
DUMP_FILE=/var/lib/postgresql/${1}_${TIMESTAMP}.dump.bz2
ssh root@${TARGET} "cd /var/lib/postgresql && doas -u postgres /usr/bin/pg_dump -Fc ${1} | /usr/bin/bzip2 > ${DUMP_FILE}"
mkdir -p ${BACKUP_DIR}
rsync -tav root@${TARGET}:${DUMP_FILE} ${BACKUP_DIR}/
ssh root@${TARGET} rm -v ${DUMP_FILE}
# Only remove older backups if newer backups exist
NEWER_BACKUPS=$(find $BACKUP_DIR -mtime -60 -type f -name "${1}_*.dump.bz2")
if [[ -n $NEWER_BACKUPS ]]; then
find $BACKUP_DIR -mtime +60 -type f -name "${1}_*.dump.bz2" -delete
else
echo "No newer backups found. Old backups not pruned."
fi
}
BACKUP_MAIL() {
mkdir -p $HOME/archive/${TARGET}/{dovecot,postfix}
rsync -tav root@${TARGET}:/etc/dovecot/{imap.passwd,dovecot.conf} $HOME/archive/${TARGET}/dovecot/
rsync -tav root@${TARGET}:/etc/postfix/virtual $HOME/archive/${TARGET}/postfix
rsync -tav root@${TARGET}:/etc/dkimkeys $HOME/archive/${TARGET}/
rsync -tav root@${TARGET}:/var/vmail $HOME/archive/${TARGET}/
ssh root@${TARGET} find "/var/vmail/*/main/cur/" -type f -mtime +90 -delete
}
BACKUP_STRFRY_DB() {
BACKUP_DIR=$HOME/archive/${TARGET}/strfry
DUMP_FILE=/tmp/strfry_${TIMESTAMP}.jsonl.zst
# Only export data since the last backup, if any exist
pushd ${BACKUP_DIR}
LAST_BACKUP_DATE=$(ls strfry_*.jsonl.zst | sort -t_ -k2 | tail -n1 | sed -E 's/strfry_([0-9-]+).jsonl.zst/\1/')
if [[ -n $LAST_BACKUP_DATE ]]; then
LAST_BACKUP_TIMESTAMP=$(date -d "${LAST_BACKUP_DATE}" +%s)
EXPORT_SINCE="--since ${LAST_BACKUP_TIMESTAMP}"
fi
popd
ssh root@${TARGET} "cd /var/lib/strfry && doas -u strfry strfry export ${EXPORT_SINCE} | zstd -c > ${DUMP_FILE}"
mkdir -p ${BACKUP_DIR}
rsync -taP root@${TARGET}:${DUMP_FILE} ${BACKUP_DIR}
ssh root@${TARGET} rm -v ${DUMP_FILE}
}