Azioni

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:

  1. single-transaction recupera un database "consistente" adatto al possibile recupero
  2. routines include nel dump le procedure e funzioni presenti nel database
  3. events include nel dump tutti gli eventi programmati
  4. databases è l'opzione che specifica che le istruzioni CREATE DATABASE vanno aggiunte al dump


L'esecuzione automatica periodica

Lo script va:

  1. reso avviabile
  2. 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.