Backup incremental pentru fișiere și MySQL
Cum să configurezi Autorestic pentru backup incremental de fișiere și baza de date MySQL

1. Instalează

Instalează autorestic de aici: https://autorestic.vercel.app/installation

În tutorialul ăsta folosim următoarea structură de fișiere: /root/backup pentru parole și configurația autorestic, un folder data înauntru unde se salvează backup-urile efective (restic repository), și folderul database unde se salvează temporar exportul din baza de date.

1mkdir /root/backup
2mkdir /root/backup/data
3mkdir /root/backup/database
4cd /root/backup

2. Fisier env pentru parole

Creează fisierul environment nano .autorestic.env și completează datele de access la baza de date:

1AUTORESTIC_LOCAL_RESTIC_PASSWORD=
2
3AUTORESTIC_PROD_DB_MYSQL_HOST=localhost
4AUTORESTIC_PROD_DB_MYSQL_PORT=3306
5AUTORESTIC_PROD_DB_MYSQL_DATABASE=
6AUTORESTIC_PROD_DB_MYSQL_USER=
7AUTORESTIC_PROD_DB_MYSQL_PASS=

Completează la AUTORESTIC_LOCAL_RESTIC_PASSWORD o cheie/parolă random generată. Cu parola asta o să fie encriptate toate backup-urile. Salvează această cheie în alt loc (password manager sau în alt fișier undeva sigur).

3. Script pentru MySQL backup

Creeaza scriptul bash pentru backup MySQL: nano backup-db-hook.sh

 1#!/usr/bin/bash
 2BACKUP_PATH=./database
 3mkdir $BACKUP_PATH
 4
 5export $(cat .autorestic.env | xargs)
 6MYSQL="$(which mysql)"
 7MYSQLDUMP="$(which mysqldump)"
 8GZIP="$(which gzip)"
 9MYSQL_PERMS=" --protocol tcp "
10MYSQL_PERMS+=" -h $(echo $AUTORESTIC_PROD_DB_MYSQL_HOST) "
11MYSQL_PERMS+=" -P $(echo $AUTORESTIC_PROD_DB_MYSQL_PORT) "
12MYSQL_PERMS+=" -u $(echo $AUTORESTIC_PROD_DB_MYSQL_USER) "
13DB="$AUTORESTIC_PROD_DB_MYSQL_DATABASE"
14export MYSQL_PWD="$AUTORESTIC_PROD_DB_MYSQL_PASS"
15DUMP_OPTIONS="--single-transaction --no-tablespaces"
16
17echo "$(date +"%d-%m-%Y %H:%M:%S") Backing up $DB to $BACKUP_PATH"
18TABLES="$($MYSQL $MYSQL_PERMS $DB -Bse 'SHOW TABLES FROM '$DB)"
19for TABLE in $TABLES ; do
20  echo "$(date +"%d-%m-%Y %H:%M:%S") Backing up $TABLE"
21  FILE="$BACKUP_PATH/${TABLE}.sql.gz"
22  $MYSQLDUMP $MYSQL_PERMS $DUMP_OPTIONS $DB $TABLE | $GZIP -9 > $FILE
23done
24echo "$(date +"%d-%m-%Y %H:%M:%S") ...done!"

(script de backup în fișiere separate pentru tabele copiat de la jeremyharris/backup.sh)

4. Configurație Autorestic

Creează fișierul config pentru autorestic: nano auto.yml

 1version: 2
 2
 3backends:
 4  local:
 5    type: local
 6    path: /root/backup/data # aici se salveaza backup-urile in sine
 7
 8global:
 9  forget:
10    keep-daily: 7
11    keep-weekly: 4
12
13locations:
14  prod:
15    from: /var/www/html # calea catre fisierele site
16    to: local
17    cron: '0 1 * * *' # backup fisiere la ora 01:00
18    forget: "yes" # sau "prune". Optiunea "Yes" trebuie să fie în ghilimele, altfel este boolean
19    options:
20      backup:
21        exclude:
22          - 'vendor'
23
24  prod-db:
25    from: /root/backup/database/
26    to: local
27    cron: '0 0 * * *' # backup baza de date la ora 00:00
28    forget: "yes"
29    hooks:
30      before:
31      - bash backup-db-hook.sh

Notă: Numele backend-ului trebuie să fie la fel ca în numele cheii din env: (cum e EXAMPLE)
AUTORESTIC_EXAMPLE_RESTIC_PASSWORD=
backends:
  example:
    type: local

5. Inițializează folderul cu comanda

1autorestic -c auto.yml -v check

Comanda asta validează configurația și inițiază un nou repository in folderul destinație.

6. Cron Job

Adaugă cron job ca să facă automat backup și purge. Autorestic recomandă cron jobul să fie setat la 5 minute.

crontab -e

1*/5 * * * * cd /root/backup; /usr/local/bin/autorestic -c /root/backup/auto.yml --ci cron --lean

Note:

  • Salvează cheia (RESTIC_PASSWORD din env) undeva extern, în afara serverului, într-un password manager sau ceva similar. Dacă pierzi cheia backup-urile sunt inutile, nu le poți decripta.
  • Ca să vezi lista de backup-uri intră în folderul /root/backup și scrie comanda autorestic exec -av snapshots
1## lista backup-urilor
2autorestic -c auto.yml exec -av snapshots
3
4## alege un snapshot id, afișează toate fișierele din acesta
5autorestic -c auto.yml exec -av -- ls --long 041c88da
6
7## acum poți alege să restaurezi doar un fișier, de exemplu, in folderul ./restore/
8autorestic -c auto.yml exec -av -- restore --target=./restore/ --include=/root/backup/database/example.sql.gz 041c88da

Ultima modificare la 2024-11-18

EN: Incremental file and MySQL backup