Molti servizi di hosting non garantiscono funzionalità di backup automatico: alcuni effettuano dei backup dei nostri siti con una certa regolarità , ma senza alcuna promessa e se ospitiamo i siti di clienti dobbiamo avere una sicurezza al riguardo. Esistono, è vero, servizi poco costosi di backup, ma necessitano un pieno accesso in lettura al sito e questo non mi piace, tanto più che avere degli importanti file di backup disponibili solo in un server remoto mi innervosisce: un disco sotto la scrivania mi pare un’opzione più sicura e meno “virtuale”.
D’altra parte a meno di avere una forte volontà , se non si automatizza il servizio di backup si rischia di finire con l’avere backup discontinui nel tempo. Fortunatamente l’NSLU2 può venire in nostro aiuto: per chi non lo sapesse si tratta di un mini computer piccolissimo e che consuma pochi watt, ma su cui si può installare una versione customizzata di GNU/Linux che lo trasforma in un vero e proprio mini server.
Grazie al mio NSLU” e a rsnapshot, ho a disposizione un backup giornaliero dei miei siti, su un harddisk a casa mia e senza la necessità del benché minimo intervento: ogni giorno a notte fonda mentre io mi godo il meritato riposo, il mio NSLU2 si connette a internet e scarica una copia dei miei siti. Grazie alla potenza di rsnapshot viene memorizzata una copia dei soli file modificati dalla volta precedente, e viene anche scaricata una copia del database.
Installare rsnapshot sull’NSLU2 è possibile molto semplicemente attraverso il gestore dei pacchetti integrato, ma è preliminarmente necessario abilitare il repository optware, lanciando lo script “setup-optware.sh”: questo script vi permetterà di installare rsnapshot e molti altri programmi interessanti usando il package manager “ipkg”. Installare rsnapshot diventa ora solo questione di scrivere:
ipkg install rsnapshot
A questo punto è necessario editare il file di configurazione /opt/etc/rsnapshot.conf; può sembrare complesso a prima vista ma esiste della buona documentazione che spiega come configurarlo per cui mi limiterò a mostrare i cambiamenti principali apportati al file di configurazione:
...
snapshot_root /snapshots/
...
questa riga istruisce rsnapshot a mantenere tutti i backup sotto /snapshots
...
interval daily 31
interval monthly 12
interval yearly 2
...
Queste righe istruiscono rsnapshot a effettuare tre livelli di backup, uno giornaliero (mantenendo copia degli ultimi 31 backup giornalieri), uno mensile (tenendo copia degli ultimi 12) e uno annuale (tenendo copia degli ultimi 2). “daily”,”monthly” e “yearly” non hanno alcun significato speciale: sono semplicemente delle parole chiave che ci permettono di dire a rsnapshot che tipo di backup vogliamo effettuare, cioè “snapshot daily” effettuerà un backup giornaliero etc. È però importante che i tipi di backup vengano inseriti nel file di configurazione in ordine di dimensione temporale, cioè prima quelli che vengono chiamati più spesso e poi quelli che vengono processati più raramente.
...
backup login@mydomain.org:/homedir domain/homedir
backup_script remote_mysql_backup.sh domain/mysql
...
l’istruzione backup istruisce rsnapshot di copiare i file loggandosi via ssh al nostro sito con nome utente login e di copiare tali file nella sottocartella domain/homedir. Perché ciò funzioni è necessario che si sia preventivamente configurato un sistema di accesso senza password (ad esempio un sistema di accesso tramite chiavi pubbliche).
backup_script invece istruisce rsnapshot a lanciare lo script remote_mysql_backup.sh e inserire i file generati dentro la cartella domain/mysql; lo script deve collegarsi remotamente ai nostri database e scriverne i dump nella cartella corrente. Questo è lo scheletro dello script che utilizzo io:
#!/bin/sh
umask 0077
ssh login@mydomain.org mysqldump -u dbuser --password=userpassword --all-databases > dbname.sql
# se ci sono altri utenti aggiungi altre righe simili a quella sopra
/bin/chmod 600 dbname.sql
Basterà ora inserire le righe seguenti nel file /etc/crontab:
PATH=/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin
10 5 * * * root rsnapshot daily
15 4 3 * * root rsnapshot monthly
35 3 5 1 * root rsnapshot yearly
per avere il nostro backup ogni giorno.
|