Database Backup Restore
Database Backups
- The database backups are performed by a cronjob which uses the bcgov backup-container
# this is used to create a cronjob that will run a backup of the database
apiVersion: batch/v1
kind: CronJob
metadata:
name: backup-cron
annotations:
openshift.io/display-name: Cron job templates for backups.
description: CronJob to backup gdx-agreements-tracker database, https://developer.gov.bc.ca/Backup-Container.
tags: backups,pmo,postgres,gdx-agreements-tracker
labels:
template: "postgres-cron-cronjob"
cronjob: "postgres-cron-backup"
spec:
schedule: "0 9 * * *" # 1 am PST / 0900 UTC
concurrencyPolicy: Forbid
successfulJobHistoryLimit: 3
failedJobHistoryLimit: 2
jobTemplate:
metadata:
labels:
template: "postgres-cron-cronjob"
cronjob: "postgres-cron-backup"
spec:
backoffLimit: 0
template:
metadata:
labels:
template: "postgres-cron-cronjob"
cronjob: "postgres-cron-backup"
spec:
containers:
- name: postgres-backup-runner
image: "bcgovgdx/gdx-agreements-tracker-backup-container"
command:
- "/bin/bash"
- "-c"
- "/backup.sh -1"
volumeMounts:
- name: backup-db
mountPath: /backups/
- name: backup-verification
mountPath: /var/lib/pgsql/data
- name: backup-config
mountPath: /backup.conf
subPath: backup.conf
env:
- name: BACKUP_STRATEGY
value: rolling
- name: BACKUP_DIR
valueFrom:
configMapKeyRef:
name: backup-config
key: BACKUP_DIR
- name: MONTHLY_BACKUPS
value: "3"
- name: DATABASE_USER
valueFrom:
configMapKeyRef:
name: config
key: POSTGRES_USER
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: secrets
key: POSTGRES_PASSWORD
volumes:
- name: backup-db
persistentVolumeClaim:
claimName: backup-db
- name: backup-verification
persistentVolumeClaim:
claimName: backup-verification
- name: backup-config
configMap:
name: backup-config
items:
- key: backup.conf
path: backup.conf
# make sure all these configKeyRefs are correct
dnsPolicy: "ClusterFirst"
successfulJobHistoryLimit: 5
failedJobHistoryLimit: 2
restartPolicy: "Never"
terminationGracePeriodSeconds: 30
activeDeadlineSeconds: 1600
serviceAccountName: "default"
serviceAccount: "default"
Database Restore
Login to Openshift:
- Go to OpenShift.
- Log in to your Openshift environment.
- Navigate to the project where you are wanting to perform the restore
Select the Backup Deployment:
- Navigate to either "Deployments" > "pmo-backup-restore"
Start the Backup Pod:
- If the "pmo-backup-restore" pod is not running, start it, but increasing the pod deployments from 0 to 1
Access Backup Pod:
- Go to "Pods" > "pmo-backup-restore-{temp-name}."
Open Pod Terminal:
- Access the terminal for the selected pod.
- To get the a list of all the backups run the following command:
./backup.sh -l
Run Command for Latest Backup:
- For the latest backup, run the following command:
./backup.sh -r pmo-postgres-service:5432/pmodb
- For the latest backup, run the following command:
Run Command for Specific Backup:
- For a specific backup, use the following command as an example:
./backup.sh -r pmo-postgres-service:5432/pmodb -f /backups/weekly/2023-12-10/pmo-postgres-service-pmodb_2023-12-10_01-00-22.sql.gz
- For a specific backup, use the following command as an example:
Reset the Deployments down to 0 Pods:
- Once the restoration is complete go to the pmo-backup-restore deployment and reset to 0 Pod.