Restaurer une sauvegarde rsnapshot

Skip to main content

Support Wissensdatenbank

Du bist hier:
Print

Restaurer une sauvegarde rsnapshot

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