# Added 2026-09-21. The datadir now lives on GlusterFS, which survives losing a # node -- but a logical dump also survives corruption, a bad upgrade, and # fat-fingered deletes, which a volume does not. Keeps 14 days. apiVersion: batch/v1 kind: CronJob metadata: name: limesurvey-db-backup namespace: limesurvey spec: schedule: "17 3 * * *" concurrencyPolicy: Forbid successfulJobsHistoryLimit: 2 failedJobsHistoryLimit: 3 jobTemplate: spec: template: spec: restartPolicy: OnFailure containers: - name: dump image: docker.io/library/mariadb:11 env: - name: MARIADB_ROOT_PASSWORD valueFrom: secretKeyRef: name: limesurvey key: db-root-password command: - sh - -c - | set -e f=/backups/limesurvey-$(date -u +%Y%m%d-%H%M%S).sql.gz mariadb-dump -h limesurvey-db -u root -p"$MARIADB_ROOT_PASSWORD" \ --single-transaction --routines --triggers --events \ --databases limesurvey | gzip > "$f" echo "wrote $f ($(stat -c%s "$f") bytes)" find /backups -name 'limesurvey-*.sql.gz' -mtime +14 -delete volumeMounts: - name: backups mountPath: /backups volumes: - name: backups persistentVolumeClaim: claimName: limesurvey-backups