Plesk – Script per backup automatico siti e database

Written by diariodiunit

17 Febbraio 2023

In sintesi

Script per la creazione di un sistema di backup automatico dei siti ospitati su Linux/Plesk, comprensivo di backup del database. I vecchi backup sono cancellati in automatico.

Il sistema integrato di backup, presente nelle recenti versioni di Plesk, si occupa egregiamente di definire dei backup incrementali sia dei siti ospitati sia dei database. In alcuni casi, tuttavia, può essere utile gestire in modo centralizzato il backup delle applicazioni e del database, ad esempio per poterli agevolmente archiviare o trasferire tramite uno script.

In questo scenario è utile definire uno script che, richiamato da un cronjob, permetta di eseguire in automatico il backup e la compressione di ogni host e di ogni database. Allo stesso tempo, per risparmiare prezioso spazio sull’HD, lo script dovrebbe automaticamente cancellare le copie vecchie del backup. In questo caso manterrà la copia recente e la copia del giorno prima

Creazione delle directory e dello script backup.sh

Per creare la directory è sufficiente digitare questi comandi in sequenza:

cd /
mkdir /backup
cd backup
touch backup.sh
chown +x backup.sh

Script di backup

È possibile incollare direttamente lo script sotto proposto utilizzando l’editor di testo nano.

nano backup.sh

A questo punto si aprirà l’editor dal quale sarà possibile inserire il codice sottostante che può essere personalizzato per avere maggiore controllo sul backup.

# !/bin/bash

##
##
## MYSQL
##
##

find /backup/* -type d -ctime +1 -exec rm -rf {} \;

TIMESTAMP=$(date +"%F")
BACKUP_DIR="/backup/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD=""
MYSQLDUMP=/usr/bin/mysqldump

mkdir -p "$BACKUP_DIR/mysql"
mkdir -p "$BACKUP_DIR/www"

databases=`$MYSQL --user=$MYSQL_USER -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`

for db in $databases; do
  echo "[#] Backup MySQL ${db}"
  $MYSQLDUMP --force --opt --user=$MYSQL_USER --databases $db | gzip > "$BACKUP_DIR/mysql/mysql-$db.gz"
done

##
## WEB
##

for dir in $(find /var/www/vhost/*  -maxdepth 1 -type d )
do
  base=$(basename "$dir")
  echo "[#] Doing backup of ${base}"
  tar -zcf "$BACKUP_DIR/www/${base}.tar.gz" $dir
done

Definire un cronjob

Il file backup.sh può essere richiamato dai cronjob di Linux. Il modo migliore per settare un nuovo cronjob è utilizzare l’interfaccia di Plesk.

Plesk > Tools & Settings & Scheduled tasks (Cron jobs) > Add task

Cronjob in plesk per il backup automatico.

Articoli correlati

Disco cifrato Linux: brute forcing con LUKS

Disco cifrato Linux: brute forcing con LUKS

LUKS è l'acronimo di Linux unified key setup ed è un robusto sistema di cifratura implementato in molte distribuzioni di Linux. Tramite LUKS è possibile cifrare intere partizioni tramite un set di password. In alcuni casi, ad esempio quando l'utente ha dimenticato la...

DHCP e indirizzi di rete

DHCP e indirizzi di rete

Tramite il protocollo DHCP è possibile assegnare in modo coerente gli indirizzi IP all’interno di una rete.