Differenze tra le versioni di "Backup: alternative FOSS a disposizione"
Da MontelLUG WIKI.
(Creata pagina con "''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 dan...") |
(→Caso 1: backup di un server: appunti sui backup) |
||
Riga 10: | Riga 10: | ||
=== Programmi FOSS a disposizione === | === Programmi FOSS a disposizione === | ||
+ | * [https://restic.net/ restic] | ||
+ | * [https://www.duplicati.com/ duplicati] | ||
+ | * duplicity | ||
+ | * rsnapshot | ||
+ | * rsync | ||
+ | |||
+ | === 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 [https://revenni.com/backup-mysql-on-debian-or-ubuntu/ qui], personalizziamo uno script: | ||
+ | |||
+ | <syntaxhighlight lang="bash" line highlight=1-100> | ||
+ | |||
+ | #!/bin/bash | ||
+ | # Dump all MySQL databases to individual files using debian-sys-maint | ||
+ | # credentials from /etc/mysql/debian.cnf | ||
+ | |||
+ | DATE=$(date +%m%d%Y-%H%M) | ||
+ | STORE_PATH=/dumps | ||
+ | DEB_CNF_PATH=/etc/mysql/debian.cnf | ||
+ | MYSQL_USER=$(/bin/cat $DEB_CNF_PATH | /bin/grep -m1 user | /usr/bin/awk '{print $3;}') | ||
+ | MYSQL_PASS=$(/bin/cat $DEB_CNF_PATH | /bin/grep -m1 password | /usr/bin/awk '{print $3;}') | ||
+ | MYSQL_ARGS="--single-transaction --routines --events" | ||
+ | MYSQL_DBS=$(mysql -u $MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | tr -d "| " | grep -v Database) | ||
+ | |||
+ | [ -d $STORE_PATH ] || mkdir -vp $STORE_PATH | ||
+ | |||
+ | for db in $MYSQL_DBS; do | ||
+ | /usr/bin/mysqldump $MYSQL_ARGS -u$MYSQL_USER -p$MYSQL_PASS --databases $db | \ | ||
+ | /bin/bzip2 -9 > $STORE_PATH/$DATE-$HOSTNAME-$db.bz2 | ||
+ | done | ||
+ | |||
+ | # Only keep last 7 days of dumps | ||
+ | /usr/bin/find $STORE_PATH/ -type f -mtime +6 -exec rm {} \; | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | 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: | ||
+ | |||
+ | <syntaxhighlight lang="bash" highlight=1> | ||
+ | chmod +x /usr/local/bin/mysql_backup.sh | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang="bash" highlight=1> | ||
+ | crontab -e | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang="bash" highlight=1> | ||
+ | 0 1 * * * /usr/local/bin/mysql_backup.sh 2>/dev/null | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | ==== Il ripristino del database ==== | ||
+ | |||
+ | <syntaxhighlight lang="bash" highlight=1> | ||
+ | bzcat 11242018-1002-db01-revenni_app.bz2 | mysql -u root -p | ||
+ | </syntaxhighlight> | ||
+ | |||
=== Setup del backup === | === Setup del backup === | ||
Riga 18: | Riga 99: | ||
* file in /root di configurazione, partizionamento, pro-memoria, istruzioni per il funzionamento del server in questione | * 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 | * 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 | + | * 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 == | == Caso 2: backup di un computer di casa == |
Versione delle 22:20, 26 ott 2021
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
- rsnapshot
- backintime
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.