Uno script per il backup notturno del tuo sito

, ,

Ecco uno script sviluppato per fare il back-up di un sito dinamico (file e database mysql), in automatico, tutte le notti.

Lo script è stato pensato per un sito WordPress ma è utilizzabile per qualunque sito php+mysql ospitato sotto UNIX.

Lo script, una volta impostata l’esecuzione ogni notte alla stessa ora, produce il backup notturno generando due file, uno per il database e uno per i file del sito, e mantiene anche il backup della notte precedente rinominandolo (_old). In questo modo, si è protetti da qualunque danno al sito posto che ce ne si accorga fino a 48 ore dopo.

E’ possibile escludere dal backup specifiche cartelle modificando il file backup-project.exclusions.

Premessa

Il backup viene mantenuto sullo stesso server su cui si trova il sito. Per ovviare anche ai casi di eliminazione completa di tutto lo spazio web (leggi: incursione di hacker o crash totale del server) occorrerà a cadenze regolari scaricare i file backup sul proprio computer o trasferirli ad un altro server. Questo passo non è contemplato qui e sarà oggetto di un altro tutorial. In ogni caso avere anche solo questo script in funzione ogni notte già vi protegge da una classe molto ampia di problemi, tra cui modifiche e cancellazioni accidentali. Ogni hosting provider serio infatti, vi protegge di suo dalla cancellazione totale dell’intero spazio web.

disclaimer: Nessuna garanzia è fornita con questo script. Lo scrivente non è responsabile di qualunque danno possa eventualmente derivarne – lo utilizzate a vostro rischio.

Istruzioni

  1. Verifica o definisci qual’è la tua cartella HOME. La cartella HOME può essere la tua cartella base oppure la cartella madre di quella del vs. sito. La cartella HOME sarà infatti quella che conterrà lo script e quella dove il backup verrà creato.
  2. Crea il file backup_project.sh nella cartella HOME copi-incollando i comandi sotto riportati.
  3. Modifica i parametri di configurazione (prime linee del file) secondo il tuo caso
  4. Salva e imposta i permessi per l’esecuzione (chmod u+x backup_project.sh se usi la shell)
  5. Crea un file backup_project.exclusions e personalizzalo seguendo l’esempio. L’esempio fornito esclude dal backup tutti i file con estensione .tar e le cartelle specificate. Lascia il file vuoto se non vuoi escludere nulla.
  6. Dal prompt comandi shell prova lo script digitando: ./backup-project.sh – La prima volta che viene eseguita apparirà un errore poiché il file _old non esiste ancora, questo è normale per la prima esecuzione. Lancia allora una seconda volta e verifica che tutto funzioni bene.
  7. Imposta lo script per l’esecuzione notturna usando cron (comando crontab). Chi ha hosting con cPanel o simili o simili troverà questa opzione cercando cron tra gli strumenti e sfrutterà una interfaccia semplificata.

Ripristino

Nel caso si debba ripristinare il sito dal backup, i comandi shell da eseguire sono in sintesi:

  • Ripristina files del sito nella cartella dove mi trovo: tar xf project-files.tar.gz
  • Ripristina database: usando phpMyAdmin, Cancellare tutte le tabelle dal databaase,poi reimportare  (project-database file.tar.gz). Se il file è troppo grande, usare l’interfaccia a linea di comando (comando mysql da shell) esempio:
mysql -uutente -Ddatabase -p”password” < script.sql

 

Lo script

script backup_project.sh

# CONFIG SECTION - Configura qui sotto - questo è un commento
# WPFOLDER=cartella in cui il tuo sito si trova
WPFOLDER=/var/www/wordpress
# PROJECT=un nome semplice per il tuo sito - niente spazi o caratteri esotici
PROJECT=myblog
# Info sul DB di seguito
DBNAME=myblogdb
DBPASS='123456'
DBUSER=myblogdbuser
# La prossima dovrebbe non servire, togliere il # e modificare se l'auto-detection non funziona
#HOME=/home/userxyz
# Fine config

echo "Backup filesystem..."
cd $WPFOLDER
tar cvf $HOME/$PROJECT-files.tar -X $HOME/backup_$PROJECT.exclusions .
cd $HOME
mv $PROJECT-files.tar.gz $PROJECT-files-old.tar.gz
gzip $PROJECT-files.tar

echo "Backup database..."
mv $PROJECT-database.sql.gz $PROJECT-database-old.sql.gz
mysqldump -u $DBUSER --password="$DBPASS" -C -Q -e --create-options $DBNAME > $PROJECT-database.sql
gzip $PROJECT-database.sql

file backup_project.exclusions

private*
cgi-bin*
wp-includes*
wp-admin*
*.tar

 

NB. Il motivo per cui il file qui sopra esclude le cartelle wp-includes e wp-admin è che queste sono comunque incluse in qualunque installazione nuova di wordpress. Inutile sprecare spazio…

0 commenti

Lascia un Commento

Vuoi partecipare alla discussione?
Sentitevi liberi di contribuire!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *