User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

linux_faq:wiki_backup

Первый вариант

Скрипт для бекапа сайта на удаленный сервер по FTP.
Скрипт бекапит всю рабочую директорию пофайлово (для того, чтобы сайт сразу после бекапа был доступен ан резервной площадке - бесплатного хостера), а также делает общий шифрованный архив, разбивает его на небольшие куски и кладет в директорию с текущей датой.
Скрипт проверяет, что глубина архива (число директорий с полным шифрованным архивом) не превышает заданного лимита и удаляет старое.

#!/bin/bash
dir_to_backup=/var/www
backup_name_prefix=wiki
ftpserver=ftp.unaux.com
username=unaux_гuser
password=superpassword
currentdate=$(date +%d-%m-%Y_%H_%M)
remote_www_dir=/htdocs
backup_depth_days=10
encryption_password=superencryptionpassword

#Get list of directories with full encrypted backups
dirs=`echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; cls --sort=date $remote_www_dir/$backup_name_prefix; bye;' ftp://$username:$password@$ftpserver" | /bin/bash`
dirs=(${dirs// / })
#check number of directories and delete oldest
if [[ ${#dirs[@]} -gt $backup_depth_days ]]; then
        for ((i = $backup_depth_days; i < ${#dirs[@]}; i++))
        {
                echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; rm -r -f ${dirs[$i]}; bye;' ftp://$username:$password@$ftpserver" | /bin/bash
        }
fi

#Mirror current site to remote server
echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; mirror -c -R $dir_to_backup $remote_www_dir; bye;' ftp://$username:$password@$ftpserver" | /bin/bash

#Make full encrypted archive
mkdir --parents /tmp/$currentdate
#tar cf - $dir_to_backup | pigz > /tmp/$currentdate/$backup_name_prefix-$currentdate.tar.gz
tar -cpf - --use-compress-program=pigz $dir_to_backup | openssl enc -aes-192-cbc -pass pass:$encryption_password -out /tmp/$currentdate/$backup_name_prefix-$currentdate.tar.gz
cd /tmp/$currentdate/
split -d -a 3 -b 8000000 ./$backup_name_prefix-$currentdate.tar.gz
md5sum /tmp/$currentdate/$backup_name_prefix-$currentdate.tar.gz > /tmp/$currentdate/$backup_name_prefix-$currentdate.tar.gz.md5
rm -f /tmp/$currentdate/$backup_name_prefix-$currentdate.tar.gz
echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; mkdir $remote_www_dir/$backup_name_prefix; mkdir $remote_www_dir/$backup_name_prefix/$currentdate; mirror -c -R /tmp/$currentdate $remote_www_dir/$backup_name_prefix/$currentdate; bye;' ftp://$username:$password@$ftpserver" | /bin/bash
rm -Rf /tmp/$currentdate

Восстановление из текущей живой копии у внешнего хостера

#!/bin/bash
backup_name_prefix=wiki
ftpserver=ftp.unaux.com
username=unaux_user
password=superpassword
remote_www_dir=/htdocs
encryption_password=superencryptionpassword

echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; mirror -c $remote_www_dir $dir_to_backup; bye;' ftp://$username:$password@$ftpserver" | /bin/bash

Восстановлние из полного шифрованного архива

#!/bin/bash
backup_name_prefix=wiki
ftpserver=ftp.unaux.com
username=unaux_user
password=superpassword
remote_www_dir=/htdocs
encryption_password=superencryptionpassword

restore_dir=~/restore

dirs=`echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; cls --sort=date $remote_www_dir/$backup_name_prefix; bye;' ftp://$username:$password@$ftpserver" | /bin/bash`
dirs=(${dirs// / })
latest_backup_dir=${dirs[0]}

mkdir -p $restore_dir
echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; mirror -c $latest_backup_dir $restore_dir; bye;' ftp://$username:$password@$ftpserver" | /bin/bash

archive_filename=`ls $restore_dir/*md5 | sed 's/.md5//'`
cat $restore_dir/x* > $archive_filename

openssl enc -in $archive_filename -d -aes-192-cbc -pass pass:$encryption_password | sudo tar -xzvf - -C $restore_dir

Discussion

Enter your comment. Wiki syntax is allowed:
G G W E N
 
linux_faq/wiki_backup.txt · Last modified: 2018/10/18 13:55 by admin