Add postgres backup
This commit is contained in:
parent
eed4145553
commit
fa5e2869ec
41
postgres_backup/job.yml
Normal file
41
postgres_backup/job.yml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
apiVersion: batch/v1
|
||||||
|
kind: Job
|
||||||
|
metadata:
|
||||||
|
name: mysql-backup
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: mysql-backup
|
||||||
|
image: mariadb:latest
|
||||||
|
command: [ "/bin/sh" ]
|
||||||
|
args: [ "-c", "sleep 3600" ]
|
||||||
|
env:
|
||||||
|
- name: MYSQL_HOST
|
||||||
|
value: galera-mariadb-galera
|
||||||
|
- name: MYSQL_USER
|
||||||
|
value: backupuser
|
||||||
|
- name: MYSQL_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: backupscrets
|
||||||
|
key: backupsecret
|
||||||
|
volumeMounts:
|
||||||
|
- name: backup-volume
|
||||||
|
mountPath: /backup
|
||||||
|
subPath: mysql
|
||||||
|
- name: backup-script
|
||||||
|
mountPath: /backup-script.sh
|
||||||
|
subPath: backup-script.sh
|
||||||
|
readOnly: true
|
||||||
|
restartPolicy: OnFailure
|
||||||
|
volumes:
|
||||||
|
- name: backup-volume
|
||||||
|
nfs:
|
||||||
|
server: 192.168.86.86
|
||||||
|
path: /volume1/backupk8s
|
||||||
|
- name: backup-script
|
||||||
|
configMap:
|
||||||
|
name: backup-script
|
||||||
|
backoffLimit: 1
|
||||||
|
|
13
postgres_backup/pv_nas.yml
Normal file
13
postgres_backup/pv_nas.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: nfs-backup-mysql
|
||||||
|
spec:
|
||||||
|
capacity:
|
||||||
|
storage: 1Mi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
server: 192.168.86.86
|
||||||
|
path: "/volume1/backupk8s/mysql/"
|
||||||
|
storageClassName: nfs
|
45
postgres_backup/script.sh
Normal file
45
postgres_backup/script.sh
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Set default values
|
||||||
|
PG_USER=${PG_USER:-postgres}
|
||||||
|
PG_PASSWORD=${PG_PASSWORD:-postgres}
|
||||||
|
PG_HOST=${PG_HOST:-localhost}
|
||||||
|
PG_PORT=${PG_PORT:-5432}
|
||||||
|
|
||||||
|
# Set backup directory
|
||||||
|
BACKUP_DIR="/data/backups/postgres"
|
||||||
|
|
||||||
|
# Generate backup timestamp with format "YYYY-MM-DD_HH-MM-SS"
|
||||||
|
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
|
||||||
|
|
||||||
|
# Set backup file name with timestamp
|
||||||
|
BACKUP_FILE="${BACKUP_DIR}/pg_dump_all_${TIMESTAMP}.sql.gz"
|
||||||
|
|
||||||
|
# Dump all databases to backup file
|
||||||
|
pg_dumpall --clean --if-exists --dbname=postgres --username="${PG_USER}" --host="${PG_HOST}" --port="${PG_PORT}" | gzip >"${BACKUP_FILE}"
|
||||||
|
|
||||||
|
# Set retention periods
|
||||||
|
WEEKLY_THRESHOLD=$(date --date="-1 week" +"%s")
|
||||||
|
MONTHLY_THRESHOLD=$(date --date="-1 month" +"%s")
|
||||||
|
YEARLY_THRESHOLD=$(date --date="-1 year" +"%s")
|
||||||
|
|
||||||
|
# Rename backups that are old enough to weekly, monthly, or yearly
|
||||||
|
find $BACKUP_DIR -maxdepth 1 -type f -name "*.gz" -not -name "*weekly*" \
|
||||||
|
-not -name "*monthly*" -not -name "*yearly*" \
|
||||||
|
-mtime +7 -mtime -28 -exec mv -f {} ${BACKUP_DIR}/pg_dump_all_weekly.sql.gz \; # move daily backups older than 7 days to weekly backups
|
||||||
|
find $BACKUP_DIR -maxdepth 1 -type f -name "*.gz" -not -name "*monthly*" \
|
||||||
|
-not -name "*yearly*" -mtime +28 -mtime -365 \
|
||||||
|
-exec mv -f {} ${BACKUP_DIR}/pg_dump_all_monthly.sql.gz \; # move weekly backups older than 28 days to monthly backups
|
||||||
|
find $BACKUP_DIR -maxdepth 1 -type f -name "*.gz" -not -name "*yearly*" \
|
||||||
|
-mtime +365 -exec mv -f {} ${BACKUP_DIR}/pg_dump_all_yearly.sql.gz \; # move monthly backups older than 365 days to yearly backups
|
||||||
|
|
||||||
|
# Clean up backups older than retention periods
|
||||||
|
find $BACKUP_DIR -maxdepth 1 -type f -name "*.gz" \
|
||||||
|
-mtime +7 -mtime -28 -not -name "*weekly*" -not -name "*monthly*" -exec rm -f {} + # remove daily backups older than 7 days but exclude those that are weekly or monthly backups
|
||||||
|
find $BACKUP_DIR -maxdepth 1 -type f -name "*.gz" \
|
||||||
|
-mtime +28 -mtime -365 -not -name "*monthly*" -not -name "*yearly*" -exec rm -f {} + # remove weekly backups older than 28 days but exclude those that are monthly or yearly backups
|
||||||
|
find $BACKUP_DIR -maxdepth 1 -type f -name "*.gz" \
|
||||||
|
-mtime +365 -not -name "*yearly*" -exec rm -f {} + # remove monthly backups older than 365 days but exclude those that are yearly backups
|
||||||
|
|
||||||
|
# Print confirmation message
|
||||||
|
echo "Done. Backup file: ${BACKUP_FILE}"
|
Loading…
Reference in New Issue
Block a user