Re:Recovering a PostgreSQL database after a hard drive failure
by frogger8 on Thursday December 30, 2021 @11:26PM
(#29744903)
And for next time. https://gist.github.com/AtulKsol/520f5d0c9a313edea7254701f6d...
[ Parent
| on HN ]
Re:Recovering a PostgreSQL database after a hard drive failure
by stevenicr on Saturday January 01, 2022 @09:11PM
(#29765052)
I'm needing to do something like this from one server to another.. the hard drive is 100% full and I can't bring myself to pay $310 to DO for a 900GB server just to dump the DB which needs to be thinned down. which come to find out even if I remove table entries for hours, postgres can't do the vacuum to return GB apparently unless it has another 360GB or so to do what it needs doing I guess.
So looking to pg-dump to a different server in a cheaper datacenter. Think I have something bookmarked talking about running rsync or something. Will be going into those options this week.
Re:Recovering a PostgreSQL database after a hard drive failure
by smbv on Friday December 31, 2021 @06:32PM
(#29753641)
I put together a quick-n-dirty backup script. It's tested.
#!/bin/bash
set -e
BACKUPDIR=/srv/backup/$(/usr/bin/date -I)
umask 137
cd /tmp
backup_init() {
echo 'Initializing backup...'
mkdir "$BACKUPDIR"
chown root:root "$BACKUPDIR"
chmod 751 "$BACKUPDIR"
}
backup_postgres() {
# Postgres
echo 'Backing up PostgreSQL...'
sudo -u postgres /usr/bin/pg_dumpall > $BACKUPDIR/postgres.sql
}
backup_podman_volumes_for_user() {
if id "$1" &> /dev/null; then
echo "Podman user $1 found. Creating backups of volumes..."
mkdir "$BACKUPDIR/$1"
chmod 751 "$BACKUPDIR/$1"
for volume in $(sudo -u $1 /usr/bin/podman volume ls --format {{.Name}}); do
echo "Backing up volume $volume for user $1"
touch "$BACKUPDIR/$1/$volume.tar"
chown $1:$1 "$BACKUPDIR/$1/$volume.tar"
chmod 660 "$BACKUPDIR/$1/$volume.tar"
sudo -u $1 /usr/bin/podman volume export "$volume" --output "$BACKUPDIR/$1/$volume.tar"
chown root:root "$BACKUPDIR/$1/$volume.tar"
chmod 640 "$BACKUPDIR/$1/$volume.tar"
done
else
echo "User $1 not found. Skipping."
fi
}
backup_bitwarden() {
backup_podman_volumes_for_user bitwarden
cp /home/bitwarden/vaultwarden.conf $BACKUPDIR/bitwarden/
}
backup_etc() {
echo 'Backing up /etc...'
rsync -a /etc/ $BACKUPDIR/etc
}
backup_jellyfin_metadata() {
echo 'Backing up Jellyfin metadata...'
mkdir $BACKUPDIR/jellyfin
rsync -a /var/lib/jellyfin/ $BACKUPDIR/jellyfin
}
backup_postprocess() {
cd /srv/backup
echo 'Compressing...'
tar -czv --atime-preserve='system' -f $BACKUPDIR.tgz $BACKUPDIR
echo 'Removing...'
rm -rf $BACKUPDIR
}
backup_init
backup_etc
backup_postgres
backup_bitwarden
backup_jellyfin_metadata
backup_postprocess