Soluzioni di backup da analizzare
https://labs.riseup.net/code/projects/backupninja
Simple script
- clean the temporarily directory
- create a backup in a directory
- create a file compress with this format application.2013-12-28.Saturday.tbz
- copy the directory (only modify or absent files) in amazon
- delete files more older than 60 days, in amazon they remains
rm -rf /root/temp-backup/*
some-backup-script-write-in-root-temp-backup.sh
DATUM=`date +%F.%A`
tar jcvf /var/s3/backup/applicazione.$DATUM.tbz /root/temp-backup/*
HOSTNAME=`/bin/hostname`
/usr/bin/s3cmd sync /var/s3backups/ s3://bucket-name/directory/$HOSTNAME/backups/
find /var/s3/backup/* -mtime +60 -exec rm {} \;
il vecchio e caro rsync
rsync -aHK --stats --delete --exclude=*.pid /sorgente/ /destinazione/magari/montata/in/nfs
guida scritta bene http://www.thegeekstuff.com/2010/09/rsync-command-examples/
A livello di cartella
rsync -avz root@192.168.99.9:/etc/apache2 /etc/
se aggiungo un ultimo / lo effettua a livello di file all'interno della cartella
rsync -avz root@192.168.99.9:/etc/apache2/ /etc/apache2
aggiorna solo i file modificati -update options
rsync --update -r /directory/partenza utentedestinazione@macchinadestinazione:/directory/destinazione
preserva gli stessi permessi nella destinazione opzione -p
copiare su porte non standard
rsync --update -r /home/giuseppe/ -e "ssh -p 1234" root@192.168.21.150:/home/giuseppe
Lavoriamo di script per backupare manualmente e solo quello che ci serve.
File crontab
01 0 * * * root /root/bin/avvio/miosito.it giornaliero
04 0 * 1 * root /root/bin/avvio/miosito.it mensile
/root/bin/avvio# cat miosito.it
#!/bin/sh
#
# decidiamo se lanciare lo script per il mese o l'anno
#
if test $1 = "giornaliero"
then
echo "backup giornaliero"
/root/bin/db/liferay-settimanale
/root/bin/files/liferay-settimanale
fi
if test $1 = "mensile"
then
echo "backup mensile"
/root/bin/db/liferay-mensile
/root/bin/files/liferay-mensile
fi
cat liferay-mensile
#!/bin/sh
#questo è un backup mensile che dura un anno va eliminato quello dello stesso mese dell'anno precedente
rm /mnt/bucket/miosito.it/liferay/db-`date | awk '{print $2}'`.gz
pg_dump -h 79.143.180.22 -U liferay lportal | gzip -c > /mnt/bucket/miosito.it/liferay/db-`date | awk '{print $2}'`.gz
cat liferay-settimanale
#!/bin/sh
#questo è un backup giornaliero che dura una settimana va eliminato quello dello stesso giorno della settimana precedente
#dura circa 4 minuti
rm /mnt/bucket/miosito.it/liferay/db-`date | awk '{print $1}'`.gz
pg_dump -h 79.143.180.22 -U liferay lportal | gzip -c > /mnt/bucket/miosito.it/liferay/db-`date | awk '{print $1}'`.gz
cat liferay-mensile
#!/bin/sh
#questo è un backup mensile che dura un anno va eliminato quello dello stesso giorno della settimana precedente
#ho testato e la durata è circa di 45 minuti il 3 luglio 2011
rm /mnt/bucket/miosito.it/liferay/cartella-`date | awk '{print $2}'`-.tar.gz
tar czf /mnt/bucket/miosito.it/liferay/cartella-`date | awk '{print $2}'`-.tar.gz /mnt/museo/liferay-portal-6.0.6/
Per funzionare ci deve essere questo file
cat .pgpass
#file per non chiedere le password al dumo
#host:porta:nomedb:miousername:miapassword
ip:5432:miodb:miousername:miapass
rsnapshot
È una sovrastruttura che si basa su rsync in modo da semplificarne le operazioni.
Crea le directory appoggiandosi agli hard link usando i numeri progressivi.
Installarlo
apt-get install rsnapshot
Azioni fondamentali
- usare sempre i tab e mai gli spazi dentro il file rsnapshot.conf
- commentare le righe di esempio dei "backup" di default e degli "interval" di default
- impostare la snapshot root , è spiegato sotto come fare
- impostare i propri "backup" e i propri "interval"
Modificare in /etc/rsnapshot.conf la snapshot root
snapshot_root /mnt/backup-rsnapshot/
Creare un backup mettendo in coda al file una riga di configurazione. Su ubuntu c'erano i parametri retain che non facevano funzionare le configurazioni li ho commentati
backup /mnt/svn/repos svn/
backup /mnt/link-per-backup-alfresco/alfresco_data alfresco/
interval giornaliero 7
Ci sono tre campi per ogni riga che vanno separati da tabulazioni e non spazi altrimenti da errore. Il primo è l'azione nel caso di backup c'è successivamente il path sorgente e poi il nome che serve per l'archiviazione.
L'azione interval indica quante copie bisogna tenere dei backup. Ho scelto 7 in modo da avere il backup degli ultimi 7 giorni. La parola giornaliero è solo un significato memonico poteva essere qualunque nome.
Per farlo funzionare si può lanciare a linea di comando
rsnapshot -v giornaliero
usando la V grande invece di quella piccola si ottengono più dettagli.
Lui creerà una struttura dentro la snapshot root
/mnt/backup-rsnapshot# ls
giornaliero.0 giornaliero.1 giornaliero.2 giornaliero.3 giornaliero.4 giornaliero.5 giornaliero.6
/mnt/backup-rsnapshot# ls giornaliero.0/
alfresco svn
Macchina remota
Per fare il backup su macchina remota bisogna prima decommentare dal file di conf
cmd_ssh /usr/bin/ssh
Poi aggiungere una riga del genere
backup utenteremoto@ipremoto:/path/remoto/da/backupare pathlocale/
L'utente root con cui viene eseguito rsnapshot deve poter effettuare il login ssh con l'uso di chiavi senza password, per far questo vedere la pagina ssh
Automatizzazione
Per rendere automatico il backup bisogna eseguire il comando sopra ad intervalli regolari nel nostro caso una volta al giorno.
Per far questo rsnapshot mette a disposizione in fase di installazione il file
nano /etc/cron.d/rsnapshot
30 3 * * * root /usr/bin/rsnapshot giornaliero
Qui ho eseguito il comando alle 3:30 di notte tutti i giorni ci sono dentro il file degli esempi che vanno personalizzati.
Script
Script vogliamo lanciare uno script di backup di un db tramite rsnapshot e conservare il contenuto nella stessa maniera che abbiamo visto sopra, fonte di questa sottoparte http://wiki.ubuntu-it.org/AmministrazioneSistema/BackupDelSistema/Rsnapshot
Prima di tutto scrivo lo script
mysqldump nomedatabase --user=root --password=passworddiroot > dump.sql
Poi facciamo in modo che rsnapshot lo esegui e stori il contenuto nella cartella giusta.
backup_script /root/script-backup/mysql-alfresco.sh alfresco/