I backup sono importanti, anzi, fondamentali.
Ho la necessità di mantenere sempre aggiornati e monitorati i backup di diversi siti internet che gestisco e per farlo ho deciso di affidare il compito ad alcuni script creati ad hoc sul NAS Synology che vi illustro suddividendo le casistiche in Hosting Condivisi e VPS.
Ognuna delle seguenti modalità, necessita la creazione di un’operazione pianificata sul pannello di controllo del Synology; la creazione è semplicissima e si effettua da questo pannello
Backup Hosting Condiviso (opzione 1)
In caso di hosting condiviso, è necessario utilizzare uno script che si connetta tramite protocollo FTP all’hosting e scarichi in una cartella predestinata i files di cui abbiamo bisogno; lo script che ho pensato presuppone l’uso di un plugin lato wordpress di nome Backwpup che si occupa di effettuare il backup di files e DB SQL salvandoli all’interno della cartella /uploads/backup/:
# Cerca tutti i files più vecchi di due giorni all'interno della cartella di destinazione del backup ed eliminali find /volume1/cartella/destinata/al/backup/ -type f -mtime +2 -exec rm {} \; # Scarica da FTP tutti i file che il plugin ha generato all'interno della cartella ed elimina i nomi delle 4 cartelle nella struttura wget -m -nH --cut-dirs=4 ftp://user:password@host/www/wp-content/uploads/backup/20* -P /volume1/cartella/destinata/al/backup/
Backup Hosting Condiviso (opzione 2)
Nel caso in cui non abbiamo necessità di effettuare il backup del Database SQL, vuoi perché abbiamo acquistato il servizio di backup automatico dall’hosting o perché vogliamo delegare il compito a phpmyadmin, per esempio, possiamo sfruttare lo stesso script, ma strutturato in maniera diversa:
# Cerca tutti i files più vecchi di due giorni all'interno della cartella di destinazione del backup ed eliminale find /volume1/cartella/destinata/al/backup/ -type f -mtime +2 -exec rm {} \; # Scarica da FTP l'intera root dell'hosting in una cartella temporanea wget -m ftp://user:password@host/www/* -P /tmp/backup-$(date +%Y-%m-%d)/ # Comprimi il contenuto della cartella temporanea in un file che comprende la data odierna tar -zcvf /volume1/cartella/destinata/al/backup/backup-$(date +%Y-%m-%d).tar.gz /tmp/backup-$(date +%Y-%m-%d)/
Backup VPS
In caso di VPS il discorso cambia in maniera radicale e a tutto lo script va premesso il fatto che il VPS sia collegato in VPN al proprio Synology e sia stata attivata la condivisione NFS della cartella che contiene tutte le webfolder; premesso questo vediamo come gestirne i backup:
In primo luogo va caricata la cartella remota NFS tramite FileStation:
Dopodiché possiamo creare la procedura che ci permette di copiare l’intera cartella montata in una cartella locale al nostro NAS.
# Cerca tutte le cartelle più vecchie di sette giorni all'interno della cartella di destinazione del backup ed eliminale find /volume1/cartella/destinata/al/backup/ -ctime +7 -exec rm {} \; # Crea la cartella con data odierna per il backup mkdir /volume1/cartella/destinata/al/backup/VPS-$(date '+%d-%b-%Y') # Copia il contenuto della cartella montata sulla cartella precedentemente creata cp -r /volume1/cartella/remota/montata/in/nfs/* /volume1/cartella/destinata/al/backup/VPS-$(date '+%d-%b-%Y')/
Per poter implementare in questa soluzione anche il dump di tutti i database di mysql, ho creato uno script da compilare e da inserire sul VPS in esecuzione automatica tramite cron: tale script si occupa di effettuare un dump di tutti i DB presenti su MySQL in files separati all’interno di una cartella (io ho scelto una cartella presente nel mount NFS).
Lo script che ho chiamato backupmysql.sh si presenta cosi:
#! /bin/bash TIMESTAMP=$(date +"%F") BACKUP_DIR="/cartella/che/condivido/in/nfs" MYSQL_USER="MySQLUser" MYSQL=/usr/bin/mysql MYSQL_PASSWORD="MySQLPassword" MYSQLDUMP=/usr/bin/mysqldump mkdir -p "$BACKUP_DIR/" databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"` for db in $databases; do $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz" done
Lascia un commento