Ripristinare il backup di rsnapshot
Support Wissensdatenbank
Ripristinare il backup di rsnapshot
Se un backup rsync o rsnapshot deve essere ripristinato, deve essere fatto molto rapidamente. A questo scopo, abbiamo creato degli script allegati per ripristinare i dati il più rapidamente possibile. Entrambi gli script possono essere eseguiti in parallelo per ripristinare i dati web e email allo stesso tempo. Lo script avvia diversi processi paralleli per accelerare il ripristino. Il prerequisito per questo è che il server di backup possa accedere al server di destinazione tramite una chiave SSH.
Requisiti:
– backup rsnapshot
– Chiave SSH memorizzata sul server di destinazione
– Server Plesk
Lo script avvia x processi Rsync specificati. Lo script può essere adattato a qualsiasi percorso. Ad esempio, “realpath” può essere cambiato in “/var/lib/mysql” per ripristinare ogni database dal file di backup individualmente. La chiave di backup SSH può anche essere scambiata con sshkey.
Ripristinare i file web (webrestore.sh):
#!/bin/bash #Settings process_limit=120 # Max amount of rsync processes server="sr00" # Server according to Backup path /volume1/backup/{$server} daily="0" # Daily number according to backup path starting with 0 like daily.0 /volume1/backup/$server/daily.{$daily} remote="sr00.firestorm.ch" # URL or IP of Target Server. sshkey="/root/.ssh/backupkey" # Rsync SSH Key backuppath="/volume1/backup/$server/daily.$daily/$server" # Source backup path from rsnapshot (No tailing slashes) realpath="/var/www/vhosts" # Server Source location (No tailing slashes) #Processes Array processes=() function check_processes { #For Each Rsync Process for pid in "${processes[@]}"; do #If Process has died / ended if ! ps -p $pid > /dev/null ; then #For Each Numbered Process Array for i in "${!processes[@]}"; do #If numberes Process equals died process if [[ ${processes[i]} = $pid ]]; then #Remove Process from array unset 'processes[i]' fi done fi done } #For Each Website in Backup for folder in $backuppath$realpath/* ; do domain="$(basename $folder)" /bin/echo "##############################" #wait if more than 30 processes while [ ${#processes[@]} -gt $process_limit ] do check_processes /bin/sleep 5s done /bin/echo "/bin/rsync --stats --progress -avz --delete $folder/ root@$server.firestorm.ch:$realpath/$domain/ (${#processes[@]} / $process_limit)" /bin/rsync --stats --progress -avz --delete -e "ssh -p 22 -i $sshkey" $folder/ root@$remote:$realpath/$domain/ & processes+=($!) done
Ripristinare i dati delle e-mail (webrestore.sh):
#!/bin/bash #Settings process_limit=120 # Max amount of rsync processes server="sr00" # Server according to Backup path /volume1/backup/{$server} daily="0" # Daily number according to backup path starting with 0 like daily.0 /volume1/backup/$server/daily.{$daily} remote="sr00.firestorm.ch" # URL or IP of Target Server. sshkey="/root/.ssh/backupkey" # Rsync SSH Key backuppath="/volume1/backup/$server/daily.$daily/$server" # Source backup path (No tailing slashes) realpath="/var/qmail/mailnames" # Server Source location (No tailing slashes) #Processes Array processes=() function check_processes { #For Each Rsync Process for pid in "${processes[@]}"; do #If Process has died / ended if ! ps -p $pid > /dev/null ; then #For Each Numbered Process Array for i in "${!processes[@]}"; do #If numberes Process equals died process if [[ ${processes[i]} = $pid ]]; then #Remove Process from array unset 'processes[i]' fi done fi done } #For Each Mailname in Backup for folder in $backuppath$realpath/* ; do domain="$(basename $folder)" /bin/echo "##############################" #wait if more than 30 processes while [ ${#processes[@]} -gt $process_limit ] do check_processes /bin/sleep 5s done /bin/echo "/bin/rsync --stats --progress -avz --delete $folder/ root@$server.firestorm.ch:$realpath/$domain/ (${#processes[@]} / $process_limit)" /bin/rsync --stats --progress -avz --delete -e "ssh -p 22 -i $sshkey" $folder/ root@$remote:$realpath/$domain/ & processes+=($!) done
wiederherstellen: