15 Apr

Backup Mysql Databases e cartelle del mio server

Da alcuni anni mi occupo di gestire dei server online basati su Ubuntu (Usano MySql e Apache) per cui basati al 100% su programmi opensource. Il problema è che spesso quando hai macchine dedicate ti devi occupare dei backups e la manutenzione dei tuoi dati.

Che si traduce semplicemente automatizzare il dump del Database e la copia di tutti i files del web server (e del dump) da qualche parte sicura, generlamente in remoto. Il resto della configurazione diciamo che non è che sia necessaria.

Per cui possiamo dividre l’articolo in due sezioni “Dump dei vari database MySql” e copia dei file con Rsync.

Creazione dello script per il Dumb dei DB MySql (scopiazzato da qui):
Creo un file dump_db.sh (di solito nella cartella bin) con l’istruzione:

vi dump_db.sh

Ci metto dentro queste istruzioni:

#!/bin/bash

USER="your_user"
PASSWORD="your_password"
OUTPUT="/users/vinny/DBs"

rm "$OUTPUTDIR/*gz" > /dev/null 2>&1

databases=`mysql --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] ; then
        echo "Dumping database: $db"
        mysqldump --force --opt --user=$USER --password=$PASSWORD --databases $db > $OUTPUT/`date +%Y%m%d`.$db.sql
        gzip $OUTPUT/`date +%Y%m%d`.$db.sql
    fi
done

Praticamente si collega al DB MySql, prende tutti i nomi del db e fa il dump. Da cambiare le info nelle prime tre linee.

Poi rendiamo lo script eseguibile:

chmod 700 backup.sh

Se esguiamo lo script ci verranno creati i file .gz nella cartella che abbiamo definito, in questo caso “/users/vinny/DBs”. Per farlo fare in manirea automatica inserite tutto nel cron (crontab -e)

Ora dobbiamo copiare questi file in una location remota. Io utilizzo Rsync che risparmia banda in quando copia le parti dei file modificati (nel nostro caso non sarà così efficiente per i DB).

Poi ho seguito questi due articoli per Rsync:

  • https://blogs.oracle.com/jkini/entry/how_to_scp_scp_and
  • https://www.digitalocean.com/community/articles/how-to-copy-files-with-rsync-over-ssh

E messo tutto in un processo cron. Ora ho un pochino da fare e rivedrò l’articolo che per adesso serve principalmente a come nota per me  ma siete i benvenuti nel commentare.