Backup: alternative FOSS a disposizione
Da MontelLUG WIKI.
Stesura in corso
E' certo che prima o poi capita a tutti di perder dei dati, mentre è incerto quando accadrà. L'unico modo per mitigare il rischio e ridurre i danni e le conseguenze della perdita dei dati è FARE I BACKUP.
Questa vuol esser una guida per quanto possibile sintetica, per una soluzione al problema dei backup.
Buone prassi per i backup
Caso 1: backup di un server
Programmi FOSS a disposizione
Backup del database
Il database, in un server, deve esser sottoposto a backup: di seguito vien riportato un esempio di script che farà periodicamente per noi il lavoro di:
- fare un dump dei nostri database in una cartella;
- comprimerlo;
- eliminare le copie troppo vecchie.
Questa cartella sarà poi sottoposta a backup e sarà a disposizione un set di copie del database in caso di future necessità.
Lo script
Prendendo spunto da qui, personalizziamo uno script:
1#!/bin/bash
2# Dump all MySQL databases to individual files using debian-sys-maint
3# credentials from /etc/mysql/debian.cnf
4
5DATE=$(date +%m%d%Y-%H%M)
6STORE_PATH=/dumps
7DEB_CNF_PATH=/etc/mysql/debian.cnf
8MYSQL_USER=$(/bin/cat $DEB_CNF_PATH | /bin/grep -m1 user | /usr/bin/awk '{print $3;}')
9MYSQL_PASS=$(/bin/cat $DEB_CNF_PATH | /bin/grep -m1 password | /usr/bin/awk '{print $3;}')
10MYSQL_ARGS="--single-transaction --routines --events"
11MYSQL_DBS=$(mysql -u $MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | tr -d "| " | grep -v Database)
12
13[ -d $STORE_PATH ] || mkdir -vp $STORE_PATH
14
15for db in $MYSQL_DBS; do
16 /usr/bin/mysqldump $MYSQL_ARGS -u$MYSQL_USER -p$MYSQL_PASS --databases $db | \
17 /bin/bzip2 -9 > $STORE_PATH/$DATE-$HOSTNAME-$db.bz2
18done
19
20# Only keep last 7 days of dumps
21/usr/bin/find $STORE_PATH/ -type f -mtime +6 -exec rm {} \;
dove:
- single-transaction recupera un database "consistente" adatto al possibile recupero
- routines include nel dump le procedure e funzioni presenti nel database
- events include nel dump tutti gli eventi programmati
- databases è l'opzione che specifica che le istruzioni CREATE DATABASE vanno aggiunte al dump
L'esecuzione automatica periodica
Lo script va:
- reso avviabile
- schedulato per un esecuzione automatica
Quindi:
chmod +x /usr/local/bin/mysql_backup.sh
crontab -e
0 1 * * * /usr/local/bin/mysql_backup.sh 2>/dev/null
Il ripristino del database
bzcat 11242018-1002-db01-revenni_app.bz2 | mysql -u root -p
Setup del backup
Cartelle da sottoporre a backup:
- file dati creati da applicazioni in "/var/" (escluse "/var/cache/", "/var/run/" e "/var/tmp/")
- file di configurazione del sistema in "/etc/"
- eventuali software locali in "/usr/local/" o "/opt/"
- file in /root di configurazione, partizionamento, pro-memoria, istruzioni per il funzionamento del server in questione
- il database: può esser impostato un dump periodico in /root del database, che poi sarà oggetto del backup assieme alla cartella
- file dati creati direttamente in "~/" o in "/root/", dove magari possono venire salvati
23:20, 26 ott 2021 (CEST)
Caso 2: backup di un computer di casa
Programmi FOSS a disposizione
- rsync o grsync -- vedere Backup incrementale completo su NAS con Rsync
- rsnapshot
- backintime
- unison -- vedere Backup: rsync, unison e boxbackup
Setup del backup
Il ripristino
Sei sicuro di aver fatto un buon lavoro? Un modo per capirlo è far finta di dover ripristinare i dati. Un passaggio fondamentale di ogni metodo di salvataggio è tentare periodicamente il ripristino, casuale, di alcuni file o cartelle dai propri supporti.