OS-sw ver.: CCBot/2.0 (https://commoncrawl.org/faq/)
Login date: 09 Apr 20 - 16:30:30
IP Address: 3.235.29.190Cursore

Registrati

---------------------------------------------------------------------------------
Script controllo dir di backup
---------------------------------------------------------------------------------



Questo script accetta in input un path, se il path non esiste lo crea sennò prosegue e cerca tutti i file con un nome che ha data/ora/minuti minore di 10 minuti e fa e restituisce i loro nomi in output:

backup_check.sh

#!/usr/bin/env bash
DATA=`date +%Y%m%d%H%M`
PERCORSOBK=$1
THRESHOLD=$(date -d "10 minutes ago" +%Y%m%d%H%M)
i=0
mkdir -p $PERCORSOBK
find ${PERCORSOBK} -type f -print0  | while IFS= read -d '' -r file
do
  if [ "$(basename "${file%.*}")" -le "$THRESHOLD" ]
    then
      echo $file
      i=1
  fi
done


lancio script:

./backup_check.sh /mnt/usb/backuppath



---------------------------------------------------------------------------------
Backup db locale, cartelle+files
---------------------------------------------------------------------------------



Questo script controlla prima se esiste il percorso inserito nella variabile PERCORSOBK ed in caso lo crea (vedi backup_check). Stoppa il servizio mysql, effettua il salvataggio delle directory PERCORSODIR (qua sotto la prima è il db, le altre possono essere directory varie) in un file zip con nome in formato data (%Y%m%d%H%M) nel percorso PERCORSOBK

backup_db.sh

#!/usr/bin/env bash
DATA=`date +%Y%m%d%H%M`
PERCORSOBK="/mnt/usb/backup/pathbackupdbecc/"
PERCORSODIR="/mnt/usb/mysql/ /mnt/usb/dir1/ /mnt/usb/dir2/"
./backup_check.sh $PERCORSOBK

sudo /etc/init.d/mysql stop
sudo zip -r $PERCORSOBK$DATA.zip $PERCORSODIR
sudo /etc/init.d/mysql start


lancio script:

./backup_db.sh



---------------------------------------------------------------------------------
Backup struttura cartelle filesystem
(no files)
---------------------------------------------------------------------------------



Questo script controlla prima se esiste il percorso inserito nella variabile PERCORSOBK ed in caso lo crea (vedi backup_check). Crea una directory temporanea dove creare la struttura delle direcotry del mount che voglio backuppare. All'interno della directory temporanea crea le directory e sottodirectory del mount da salvare. Zippa la directory temporanea mettendo il file in PERCORSOBK con nome stile %Y%m%d%H%M.zip, saltando per sicurezza i link simbolici e le directory escluse inserite nella variabile DIRDAIGNORARE. Infine cambia i permessi del file zip e rimuove la directory temporanea.

backup_strutt_usb.sh

DATA=`date +%Y%m%d%H%M`
PERCORSOBK="/mnt/usb/backup/arrow.dharma/struttura_dir_usb/"
PERCORSOMNT="/mnt/usb/"
DIRTEMP="tempbckusb/"
DIRDAIGNORARE="*tempbckusb*"
./backup_check.sh $PERCORSOBK

mkdir $PERCORSOMNT$DIRTEMP
cd $PERCORSOMNT
sudo find -type d -links 2 -exec mkdir -p "$PERCORSOMNT$DIRTEMP{}" \;
sudo zip --symlinks -r $PERCORSOBK$DATA.zip $PERCORSOMNT$DIRTEMP -x $DIRDAIGNORARE
sudo chown user:user $PERCORSOBK$DATA.zip
sudo rm -Rf $PERCORSOMNT$DIRTEMP


lancio script:

./backup_strutt_usb.sh



---------------------------------------------------------------------------------
Backup immagine intero disco
---------------------------------------------------------------------------------



Questo script prima verifica la presenza della cartella di backup e poi esegue un dd dell'intero disco (occhio quindi alle dimensioni) prendendo in input la variabile PERCORSOSD e restituendo in PERCORSOBK il file in formato %Y%m%d%H%M.img.

backup_sd.sh

#!/usr/bin/env bash
DATA=`date +%Y%m%d%H%M`
PERCORSOBK="/mnt/usb/backup/arrow.dharma/sd/"
PERCORSOSD="/dev/mmcblk0"
./backup_check.sh $PERCORSOBK

sudo dd if=$PERCORSOSD of=$PERCORSOBK$DATA.img


lancio script:

./backup_sd.sh



---------------------------------------------------------------------------------
Backup siti web remoti
(tipo altervista.org o aruba.it)
---------------------------------------------------------------------------------



Questo script controlla prima se esiste il percorso inserito nella variabile PERCORSOBK ed in caso lo crea (vedi backup_check). Rimuove l'eventuale, se presente, cartella temporanea PERCORSOMNT$DIRTEMP e la crea vuota. Lancia lo script "backup_crea.php" presente nella root del nostro sito, questo non fa altro che creare un dump del database. Successivamente in ftp preleva tutti i file presenti sul server (quindi anche il dump del db) e li copia nella directory temporanea. Zippa la directory temporanea nel percorso PERCORSOBK/SERVER/ salvando il file zip con nome %Y%m%d%H%M.zip. Cambia i presmessi del file zip e rimuove la directory temporanea  PERCORSOMNT$DIRTEMP, infine lancia lo script per cancellare il dump del db.
ATTENZIONE!!! il nome del file del db dumpato deve essere escluso dalla possibilità di essere scaricato tramite .htaccess sennò si rischia che qualche malintenzionato ci rubi le credenziali!!!

backup_website.sh

#!/usr/bin/env bash
DATA=`date +%Y%m%d%H%M`
PERCORSOBK="/mnt/usb/backup/websites/"
PERCORSOMNT="/mnt/usb/backup/"
DIRTEMP="tempbckwebsites/"
USERNAME=$1
PASSWORD=$2
SERVER=$3
./backup_check.sh $PERCORSOBK$SERVER

rm -Rf $PERCORSOMNT$DIRTEMP
mkdir $PERCORSOMNT$DIRTEMP
cd $PERCORSOMNT$DIRTEMP

wget http://$SERVER/backup_crea.php
wget -m --user=$USERNAME --password=$PASSWORD ftp://ftp.$SERVER/

zip -r $PERCORSOBK$SERVER/$DATA.zip $PERCORSOMNT$DIRTEMP
chown user:user $PERCORSOBK$SERVER/$DATA.zip
rm -Rf $PERCORSOMNT$DIRTEMP
wget http://$SERVER/backup_dele.php



lancio script:

./backup_website.sh username password nomedominio.it



Parte server remoto

Nella root del server remoto copiare i seguenti script:

-backup_crea.php
-backup_dele.php

Il primo creerà un dump (db_backup.sql) del db nella root del'host:

<?php
backup_tables('ip o nome host db','usernamedb','passworddb','nomedb');

/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$tables = '*')
{
    
    $link = mysql_connect($host,$user,$pass);
    mysql_select_db($name,$link);
    
    //get all of the tables
    if($tables == '*')
    {
        $tables = array();
        $result = mysql_query('SHOW TABLES');
        while($row = mysql_fetch_row($result))
        {
            $tables[] = $row[0];
        }
    }
    else
    {
        $tables = is_array($tables) ? $tables : explode(',',$tables);
    }
    
    //cycle through
    foreach($tables as $table)
    {
        $result = mysql_query('SELECT * FROM '.$table);
        $num_fields = mysql_num_fields($result);
        
        $return.= 'DROP TABLE '.$table.';';
        $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
        $return.= "\n\n".$row2[1].";\n\n";
        
        for ($i = 0; $i < $num_fields; $i++)
        {
            while($row = mysql_fetch_row($result))
            {
                $return.= 'INSERT INTO '.$table.' VALUES(';
                for($j=0; $j < $num_fields; $j++)
                {
                    $row[$j] = addslashes($row[$j]);
                    $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                    if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                    if ($j < ($num_fields-1)) { $return.= ','; }
                }
                $return.= ");\n";
            }
        }
        $return.="\n\n\n";
    }
    
    //save file
    $handle = fopen('db_backup.sql','w+');
    fwrite($handle,$return);
    fclose($handle);
}
?>


Attenzione a settare l'.htaccess in modo da escludere il prelievo del file via http:

RewriteEngine On
RewriteBase /

# Protect the htaccess file
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

# Protect db_backup.sql
<Files "db_backup.sql">
Order Allow,Deny
Deny from all
</Files>

# Disable directory browsing
Options All -Indexes


Il secondo script cancella il dump:

<?php
unlink('db_backup.sql');
?>



---------------------------------------------------------------------------------
Cancellazione vecchi backup
---------------------------------------------------------------------------------



Questo script cerca nella cartella e nelle sottocartelle del path in input i file più vecchi di 3 mesi. Il formato dei file deve per forza essere Y%m%d%H%M, es:
201605140552.zip
Controlla che il file sia lungo 12 caratteri e che essi siano strettamente numerici e cancella i file che hanno superato il THRESHOLD. Mantiene comunque una versione di backup, in modo di avere comunque un backup valido.

backup_del_old.sh

#!/usr/bin/env bash
DELETE_OTHERS=no
BACKUPS_PATH=$1
THRESHOLD=$(date -d "3 months ago" +%Y%m%d%H%M)
echo "Cancello i Backup contenuti in:" $BACKUPS_PATH
echo "Con data più vecchia del:" $(date -d "3 months ago" +%d-%m-%Y)
i=0
find ${BACKUPS_PATH} -type d -print0 | while IFS= read -d '' -r PATHS
do
  i=0
  find ${PATHS} -type f -print0  | while IFS= read -d '' -r file
  do
    if [[ "$(basename "$file")" =~ ^[0-9]{12} ]]
    then
        let "i++"
        if [ "$(basename "${file%.*}")" -le "$THRESHOLD" ]
        then
          if [ $i -gt 1 ]
            then
            rm -vf -- "$file"
          fi
        fi
    else
        [ $DELETE_OTHERS == "yes" ] && rm -vf -- "$file"
    fi
  done
done



lancio script:

./backup_del_old.sh /path/del/backup



---------------------------------------------------------------------------------
Scriptone finale
---------------------------------------------------------------------------------



Infine creiamo uno script adatto ad automatizzare in sequenza tutti gli script soprastanti, da lanciare a mano o con crontab.

backup.sh

cd /opt/scripts
nohup ./backup_db.sh > backup.log
nohup ./backup_sd.sh >> backup.log
nohup ./backup_strutt_usb.sh >> backup.log
nohup ./backup_website.sh usernamesito1 passwordsito1 nome.sito1.org >> backup.log
nohup ./backup_website.sh usernamesito2 passwordsito2 nome.sito2.org >> backup.log
nohup ./backup_website.sh usernamesito3 passwordsito3 nome.sito3.org >> backup.log
nohup ./backup_website.sh usernamesito4 passwordsito4 nome.sito4.org >> backup.log
nohup ./backup_del_old.sh /mnt/usb/backup/ >> backup.log
nohup ./sendmailbackup.sh "Eseguito il backup di localhost.dominiolocale e website"


lancio script:

./backup.sh



---------------------------------------------------------------------------------
Invio mail log di backup
---------------------------------------------------------------------------------



Questo script accetta in input l'oggetto della mail ed allega il file LOGFILE zippato in ATTFILE dall'indirzzo contenuto nella variabile MAILFROM all'indirizzo MAILTO.

sendmailbackup.sh

#!/bin/bash
MAILTO=Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo.
MAILFROM=Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo.
LOGFILE=/opt/scripts/backup.log
ATTFILE=/opt/scripts/backup.zip
ATTNAME=backup.zip

zip -r $ATTFILE $LOGFILE
(cat <<HERE;  uuencode "${ATTFILE}" "${ATTNAME}")  | sendmail -oi -t
From: ${MAILFROM}
To: ${MAILTO}
Subject: $1 - $ATTNAME
HERE


lancio script:

./sendmailbackup.sh "Eseguito il backup"



---------------------------------------------------------------------------------
Eventual rsync del backup
---------------------------------------------------------------------------------



In questo script vado a copiare tutto il mio backup su un altro storage della lan, quindi monto lo storage e avvio un rsync che non setta i permessi sulla destinazione (in quanto non m'interessa visto che vado a copiare file zip creati con gli script sopra) e riparte da dove aveva copiato in caso di blocco durante la copia (--inplace).
Infine cancella i file vecchi sulla destinazione.

backup_rsync.sh

sudo mount -a
rsync -avz --inplace --no-owner --no-group /path/sorgente/backup/ /path/destinazione/Backup/
./backup_del_old.sh /path/destinazione/Backup/


lancio script:

./backup_rsync.sh



Visite totali139859
Questo sito web usa i cookies per gestire alcune funzionalità, quali navigazione, autenticazione, commenti, etc. Utilizzando il nostro sito web, accetti l'utilizzo dei cookies.