Restaurer une sauvegarde rsnapshot

Support Wissensdatenbank

Du bist hier:
Print

Restaurer une sauvegarde rsnapshot

Lorsqu’une sauvegarde rsync ou rsnapshot doit être restaurée, cela doit se faire très rapidement. Pour cela, nous avons créé les scripts ci-joints afin de restaurer les données le plus rapidement possible. Les deux scripts peuvent être exécutés en parallèle afin de restaurer simultanément les données web et e-mail. Le script lance plusieurs processus parallèles pour accélérer la restauration. Pour cela, il faut que le serveur de sauvegarde puisse accéder au serveur cible via une clé SSH.

Conditions préalables :
– rsnapshot Backup
– Clé SSH déposée sur le serveur cible
– Serveur Plesk

Le script démarre x processus Rsync définis. Le script peut être adapté pour n’importe quel chemin. Par exemple, on peut adapter “realpath” à “/var/lib/mysql” pour restaurer chaque base de données individuellement à partir de la sauvegarde de fichiers. Avec sshkey, il est également possible d’échanger la clé de sauvegarde SSH.

 

Restaurer les fichiers 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

 

Restaurer les données de l’email (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:

 

War dieser Artikel hilfreich?
0 out Of 5 Stars
5 Stars 0%
4 Stars 0%
3 Stars 0%
2 Stars 0%
1 Stars 0%
Wie können wir diesen Artikel verbessern?
Please submit the reason for your vote so that we can improve the article.
Brauchst du Hilfe?
Related Post