Skip to main content

Databases back-up

Backing up databases from TrueCharts apps

tcdbbackup.sh
#!/bin/bash
# create backup folder
folder="./dumps/"
mkdir -p "$folder"

# get namespaces with postgres database pod
namespaces=$(k3s kubectl get pods -A | grep postgres | awk '{print $1}')

for ns in $namespaces; do
# extract application name
app=$(echo "$ns" | sed 's/^ix-//')

echo "Creating database backup for $app."

file="$app.sql"

# Scale down deployment to avoid inconsistencies in DB
k3s kubectl scale deploy "$app" -n "$ns" --replicas=0
while true; do k3s kubectl get pods -n "$ns" | grep -i -q terminating || break; done;

k3s kubectl exec -n "$ns" -c "$app"-postgresql "$app"-postgresql-0 -- bash -c 'PGPASSWORD=$POSTGRES_PASSWORD pg_dump -Fc -U $POSTGRES_USER -d $POSTGRES_DB -f /tmp/'$file
k3s kubectl cp -n "$ns" -c "$app"-postgresql "$app-postgresql-0:tmp/$file" $folder$file

# Scale deployment back up
k3s kubectl scale deploy "$app" -n "$ns" --replicas=1

if [ ! -f "$folder$file" ]; then
>&2 echo "$folder$file does not exist."
exit 1
fi

echo "File $file created."

done

exit 0