Post

DBBackup - Simple database backup locally or to S3 or more

DBBackup - Simple database backup locally or to S3 or more

DBBackup is able to backup up CouchDB, InfluxDB, MySQL/MariaDB, Microsoft SQL, MongoDB, Postgres, Redis servers.

I currently use this for automated backups of my Databases (MariaDB and PostgreSQL) I don’t consider the homeassistant database that important so i have excluded this as it can get quite large

Kubernetes Manifest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: dbbackup
    app.kubernetes.io/instance: dbbackup
    app.kubernetes.io/name: dbbackup
  name: dbbackup
  namespace: backup
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: dbbackup
  template:
    metadata:
      labels:
        app: dbbackup
        app.kubernetes.io/name: dbbackup
    spec:
      nodeSelector:
        worker: "true"
      containers:
      - image: tiredofit/db-backup:latest
        name: dbbackup
        env:
        - name: CONTAINER_ENABLE_MONITORING
          value: "FALSE"
        - name: DEFAULT_CREATE_LATEST_SYMLINK
          value: "FALSE"
        - name: DEFAULT_BACKUP_BEGIN
          value: 0 1 * * 0
        - name: DEFAULT_CLEANUP_TIME
          value: "10080"

        - name: TZ
          value: Europe/London
          
        - name: DB01_HOST
          value: mariadb.mariadb
        - name: DB01_NAME
          value: ALL
        - name: DB01_PASS
          value: [REDACTED]
        - name: DB01_TYPE
          value: mysql
        - name: DB01_USER
          value: backup
        - name: DB01_SPLIT_DB
          value: "TRUE"                    

        - name: DB02_HOST
          value: postgresql.postgresql
        - name: DB02_NAME
          value: ALL
        - name: DB02_PASS
          value: [REDACTED]
        - name: DB02_TYPE
          value: pgsql
        - name: DB02_USER
          value: admin
        - name: DB02_SPLIT_DB
          value: "TRUE"            

        volumeMounts:
        - mountPath: "/backup"
          readOnly: false
          name: smb
          subPath: "database"
      volumes:
        - name: smb
          persistentVolumeClaim:
            claimName: pvc-dbbackup-smb

Docker Compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
version: '3.2'
services:
  dbbackup:
    image: tiredofit/db-backup:latest
    hostname: dbbackup
    networks:
      - traefik-public
    environment:
      - TZ=Europe/London
      - DEFAULT_BACKUP_BEGIN=0 1 * * 0
      - DEFAULT_CLEANUP_TIME=10080
      - CONTAINER_ENABLE_MONITORING=FALSE
      
      # MySQL (MariaDB)
      - DB01_TYPE=mysql
      - DB01_HOST=mariadb
      - DB01_NAME=ALL
      - DB01_USER=[REDACTED]
      - DB01_PASS=[REDACTED]
      - DB01_NAME_EXCLUDE=homeassistant

      # PostgreSQL
      - DB02_TYPE=pgsql
      - DB02_HOST=postgresql
      - DB02_NAME=ALL
      - DB02_USER=[REDACTED]
      - DB02_PASS=[REDACTED]

    volumes:
      - type: bind
        source: /srv/cephfs/docker/appdata/dbbackup
        target: /backup
    deploy:
      mode: replicated
      placement:
        constraints: [node.role == manager]
networks:
  traefik-public:
    external: true
This post is licensed under CC BY 4.0 by the author.