MySql come fare un 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 ho “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

Maurizio Pelizzone

Maurizio Pelizzone

Sono Maurizio Pelizzone, sviluppatore WordPress da oltre vent'anni e consulente di intelligenza artificiale a Torino, co-fondatore di Mavida. Realizzo plugin e integrazioni su misura per WordPress e WooCommerce, automazioni dei processi con n8n e agenti AI, e tengo corsi e workshop su Claude Code, prompt engineering e vibe coding, in presenza a Torino o da remoto. Sono speaker ai WordCamp e autore della guida gratuita in italiano a Claude Code; se vuoi parlarmi di un progetto puoi prenotare una call conoscitiva.

4 commenti

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

Lascia una risposta

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