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]

3 Replies to “mysql backup via mail”

  1. ma deve essere sempre fatto via bash? Io ne ho scritto uno in php. Fa le stesse cose, solo che per quanto riguarda l’allegato puoi mandare qualsiasi cosa, ho scritto proprio col protocollo per le mail l’invio dell’allegato.

  2. E’ possibile inserire nel comando un “filtro” in modo tale che se il dump restituisse errore partirebbe una mail di avviso e non un file zip vuoto o con dati rovinati?

  3. Ottimo metodo, l’ho preso come spunto per il mio backup.. Un unico appunto: mandando il dump del database via email in chiaro lo esponi ad attacchi del tipo man in the middle, quindi se contiene dati ‘sensibili’ potrebbero essere visti da parte di terze parti!!

    Io l’ho modificato nel modo seguente:

    mysqldump -u[utente] -p[password] [nomedatabase]| gzip –best -c > /backup/directory/`date +%A`_[nomedatabase].sql.gz

    Il dump gzippato lo salvo in locale in una dir di backup, rotando settimanalmente. Eventualmente in un secondo tempo si potrebbe implementare uno scp per spostare il tutto da qualche parte, questa volta cifrato..

Leave a Reply

Your email address will not be published. Required fields are marked *