Резервне копіювання VPS під CentOS через sFTP

Поширте інформацію:

Я орендую VPS-сервер, але провайдер не виконує централізованого резервного копіювання даних. Тож доводиться робити самому, бо без резервних копій – життя немає!
Я маю SSH-доступ до іншого сервера, на нього й буду робити копії.
Знадобиться тільки tar, FTP-клієнт lftp, скрипт, який буде їх скеровувати і cron, щоб запускати скрипт за розкладом.

Дані знаходяться в каталозі /home, його й будемо копіювати. Щоб робити копію також вибіркових файлів налаштувань, зробимо в /home символічні посилання на потрібні файли/каталоги, наприклад:

# mkdir /home/etc
# ln -s /etc/sysconfig /home/etc/sysconfig
# ln -s /root /home/root

Встановлюємо lftp:

# yum install lftp

Пишемо в /root/backup.sh скрипт:

#!/bin/bash

echo "Running script $(basename $0)..."

mkdir -p /tmp/backup

Backup_Dir=/home

MYSQL_UserName='thesqluser'
MYSQL_PassWord='thesqlpassword'

Databases=( mysql db1 db2 db3 )
DB_Dump_Dir=/home/dbdump

#you need to create dir on your ftp first.

FTP_HostName='sftp://backupserver.com'
FTP_Port=22
FTP_UserName='theuser'
FTP_PassWord="thepassword"
FTP_BackupDir=backup

TodayBackup=beta-$(date +"%Y%m%d").tar.gz
OldBackup=beta-$(date -d -7day +"%Y%m%d").tar.gz

echo 'Dumping MySQL databases...'
for Db_Name in "${Databases[@]}"
do
	echo $Db_Name
	mysqldump -u $MYSQL_UserName -p$MYSQL_PassWord $Db_Name > $DB_Dump_Dir/$Db_Name.sql
done

echo 'Creating archive...'
tar -czhPf /tmp/backup/$TodayBackup $Backup_Dir

echo 'Erasing old copy...'
rm -f /tmp/backup/$OldBackup

cd /tmp/backup

echo "Server $FTP_HostName"

lftp $FTP_HostName -p $FTP_Port -u $FTP_UserName,"$FTP_PassWord" << EOF
#set ftp:ssl-allow off
cd $FTP_BackupDir
mrm $OldBackup
mput $TodayBackup
bye
EOF

echo 'Backup complete.'
echo
echo

Опції tar:
c - створити архів
z - застосувати стиснення (gzip)
h - розкривати символічні посилання
P - не видаляти початкову косу риску `/' з назв файлів
f - використовувати вказаний файл або пристрій
--exclude - винятки (не архівувати)

Локальна копія робиться в /tmp/backup
Архівні копії на сервері будуть зберігатися 3 дні завдяки цьому
OldBackup=files-$(date -d -3day +"%Y%m%d").tar.gz
і ftp-команді
mrm $OldBackup

Рядок
set ftp:ssl-allow off
потрібний, якщо на сервері для резервних копій встановлено SSL-сертифікат, що втратив чинність, але ви все одно хочете туди копіювати.

Перевіряємо роботу скрипта:

# bash /root/backup.sh

Якщо працює нормально, заплановуємо

# crontab -e

Дописуємо рядок

0 0 * * * bash /root/backup.sh

Зберігаємо файл і виходимо.

Все! Налаштоване автоматичне резервне копіювання.

Зроблено за зразком http://dallascao.com/en/centos-website-backup-shell-scripts/

Upd. Додано дамп баз даних MySQL

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.