Я орендую 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