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 su 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.

 

[ad name=”728×90″]

 

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 l’hosting presso Hostgator, BlueHost o simili troverà questa opzione nel cPanel con una interfaccia semplificata.

Ripristino

  1. Nel caso si debba ripristinare il sito dal backup, i comandi shell da eseguire sono in sintesi:
  • Ripristina files del sito: gunzip (project-files.tar.gz) – tar xvf (project-files.tar)
  • 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:
<strong>mysql -u</strong><em>utente</em><strong> -D</strong><em>database</em><strong> -p"</strong><em>password</em><strong>" &lt; </strong><em>script.sql</em>

 

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 &gt; $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…

 

[ad name=”728×90″]

Altri post utili


Valuta questo articolo

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Lascia un commento

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