Categorie
bho en ?

mysql backup via mail

Dopo la disavventura di qualche giorno fa ho migliorato un po’ le mie procedure di backup relative ai database mysql, apportando qualche modifica agli script su crontab; questo è quello che “prodotto

mysqldump -u[utente] -p[password] [nomedatabase]| gzip --best -c > [nomedatabase].sql.gz && (date && echo "backup mysql" && uuencode [nomedatabase].sql.gz ) | mail [miamail@dominio.ext] -s "backup mysql"
(qui trovate la gist su github)

In pratica mi mando via mail, le istruzioni per ricreare il db avendo prima cura di comprimerle.

Essendo il comando un po’ lungo, avrei potuto fare uno script per poi eseguirlo, ma la potenza della shell è anche questo: concatenazione e reindirizzamento di comandi.

In reatà se scomponiamo i problemi è molto più semplice di quello che sembra.

Parte uno: con mysqldump genero le istruzioni SQL che permettono di ricreare il database.

mysqldump -u[utente] -p[password] [nomedatabase]

Parte due: raccolgo lo STDOUT e lo passo a gzip che si occupa di comprimerlo e salvarlo

| gzip –best -c > [nomedatabase].sql.gz

Parte tre: aspetto che gzip finisca il suo lavoro e se va tutto bene ( && ) preparo il contenuto della mail
( essendo il file compresso in formato binario uso uuencode allegarlo alla mail )

&& (date && echo “backup mysql” && uuencode [nomedatabase].sql.gz wordpress.sql.gz)

Parte quattro: passo la stringa precedentemente creata al comando mailche infine si occupera di recapitarla nella mia casella di posta

| mail [miamail@dominio.ext] -s “backup mysql”

Se qualcuno ha idee per migliorare quanto scritto mi faccia sapere …

Link di riferimento: mysqldump, shelldorado

[tags]mysql,backup,shell[/tags]

Categorie
featured tutorial

Backup con rsync e crontab

Inizio con il riportare la definizione di Rsync scritta su Appunti di informatica libera.

Rsync è un sistema di copia tra elaboratori (o anche all’interno del file system dello stesso sistema locale), in grado di individuare e trasferire il minimo indispensabile di dati, allo scopo di allineare la destinazione con l’origine. L’uso di questo programma è molto semplice ed è simile a quello di rcp (Remote shell copy) o anche di scp (Secure shell copy).

L’aggiornamento dei dati, in funzione delle opzioni utilizzate, può basarsi sul confronto delle date di modifica, delle dimensioni dei file e anche sul calcolo di un codice di controllo (checksum). In linea di principio, a meno di utilizzare opzioni che specificano qualcosa di diverso, non conta il fatto che i dati siano più recenti o meno, basta che questi siano diversi per ottenerne il trasferimento.

Alla luce di quanto scritto personalmente lo trovo un buon sistema per effettuare dei backup dove non ci sono problemi di spazio ( in quanto la copia viene fatta 1 a 1 con l’originale )

Supponendo di voler effettuare il backup della directory /home su /backup_giornaliero possiamo semplicemente scrivere :

rsync -a -v --delete /home /backup_giornaliero

questo il significato dei parametri …

  • -a duplica anche le sottodirectoy in modo ricordsivo
  • -v ci da il dettaglio dello svolgimento della copia
  • –delete cancella i file sotto /backup_giornaliero che non esistono in /home

Ma come possiamo automatizzare questo comando ?
Io ho usato cron.
( per una guida in italiano vi suggerisco questo link )

Ho editando il file /etc/crontab e aggiunto questa riga:

0 23 * * * root rsync -a -v --delete /home /backup_giornaliero

In questo modo ogni giorno alla 23.00 viene fatto partire rsync

Dato che sono paranoico e che un backup non mi basta , una volta alla settimana ed una volta al mese preferisco farne un altro.

0 23 * * * root rsync -a -v --delete /home /backup_giornaliero
0 2 * * 0 root rsync -a -v --delete /home /backup_settimanale
0 5 1 * * root rsync -a -v --delete /home /backup_mensile

In questo modo tutte le sere faccio il backup su /backup_giornaliero
Ogni domenica alla 2 del mattino lo faccio su /backup_settimanale
Ed il giorno 1 di ogni mese alla 5 del mattino viene fatto su /backup_mensile

Ricordiamoci di creare le directory !!!

Mi rimane ancora una domanda … come faccio a sapere se il backup è stato eseguito ?
Mi faccio mandare una mail !!!

0 23 * * * root rsync -a -v --delete /home /backup_giornaliero | mail tuamail@dominio.it -s "Log Backup"
0 2 * * 0 root rsync -a -v --delete /home /backup_settimanale | mail tuamail@dominio.it -s "Log Backup"
0 5 1 * * root rsync -a -v --delete /home /backup_mensile | mail tuamail@dominio.it -s "Log Backup"

In questo modo grazie all’opzione -s ed all’utilizzo della pipe ci inviamo l’output di rsync nella nostra casella di posta.