Автоматическое резервное копирование сайтов и баз MySQL

Если сайт находится у хостинг провайдера, услугу автоматического бэкапирования можно заказать у самого провайдера. Но когда веб сервер находится в вашем распоряжении и на нем находится не один проект, то задача резервного копирования сайта и баз данных задача актуальная.

Рассмотрим процесс автоматизации резервного копирования сайтов на примере сервера где расположены два сайта, а в качестве сервера баз данных выступает MySQL (MariaDB).

Резервные копии баз MySQL (MariaDB)

Для бэкапирования баз MySQL используем утилиту mysqldump. Ниже приведен скрипт с комментариями. Все названия переменных отражают назначение. Резервные копии баз будут создаваться в локальной папке /tmp/mybackup/ и после перемещаться в папку DB на FTP сервере.

#!/bin/sh

### Локальные переменные  ####
DATE=`date +%d%m%Y`
LOCAL_BACKUP_DIR="/tmp/mybackup/"
### Переменные доступа к СУБД ####
DB_USER="mysql_database_user"
DB_PASSWORD="mysql_database_user_PASSWORD"
DB_NAME1="database_1"
DB_NAME2="database_2"
### Переменные доступа к FTP ###
FTP_SERVER="ftp_server_IP"
FTP_USERNAME="ftp_user"
FTP_PASSWORD="ftp_user_PASSWORD"
FTP_UPLOAD_DIR="/DB/"

### Резервное копирование баз в локальную папку  ###

mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME1 | gzip > $LOCAL_BACKUP_DIR/${DB_NAME1}_${DATE}.sql.gz
mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME2 | gzip > $LOCAL_BACKUP_DIR/${DB_NAME2}_${DATE}.sql.gz

### Выгрузка файлов на FTP сервер ###
ftp -n $FTP_SERVER << EndFTP
user "$FTP_USERNAME" "$FTP_PASSWORD"
binary
hash
cd $FTP_UPLOAD_DIR
#pwd
lcd $LOCAL_BACKUP_DIR
put "${DB_NAME1}_${DATE}.sql.gz"
put "${DB_NAME2}_${DATE}.sql.gz"
bye
EndFTP

### Проверка выгрузки баз на FTP и очистка локальной папки  ###
if test $? = 0
then
 echo "Базы выгружены на FTP сервер"
 rm -rf /tmp/mybackup/*.sql.gz
else
 echo "Ошибка выгрузки баз на FTP сервер"
fi

Создаем необходимые папки на локальном сервере и на FTP сервере.

Создаем задание в cron с условием выполнения каждую среду и субботу в 2:00:

0 2 * * 3,6       /bin/sh /home/www/mysql_backup.sh

Резервные копии файлов проекта

Аналогично с базами данных создаем скрипт резервного копирования для архивации и перемещение на FTP сервер папки с файлами проектов (сайтов).

#!/bin/sh

### локальные переменные  ####
DATE=`date +%d%m%Y`;
LOCAL_BACKUP_DIR="/tmp/mybackup/"
### переменные доступа к папке ###
DIR1="/var/www/site1.ru"
DIR2="/var/www/site2.ru"
FILENAME1="site_1_$DATE"
FILENAME2="site_2_$DATE"
### переменные доступа к FTP ###
FTP_SERVER="ftp_server_IP"
FTP_USERNAME="ftp_user"
FTP_PASSWORD="ftp_user_PASSWORD"
FTP_UPLOAD_DIR="/Archive/"

### Резервное копирование сайтов в локальную папку ###
cd $DIR1
tar -czf $BACKUPDIR/$FILENAME1.tar.gz ./
cd $DIR2
tar -czf $BACKUPDIR/$FILENAME2.tar.gz ./

### Выгрузка файлов на FTP сервер ###
ftp -n $FTP_SERVER << EndFTP
user "$FTP_USERNAME" "$FTP_PASSWORD"
binary
hash
cd $FTP_UPLOAD_DIR
#pwd
lcd $BACKUPDIR
put "$FILENAME1.tar.gz"
put "$FILENAME2.tar.gz"
bye
EndFTP

### Проверка выгрузки баз на FTP и очистка локальной папки  ###
if test $? = 0
then
 echo "Файлы выгружены на Ftp сервер"
 rm -rf /tmp/mybackup/*.tar.gz
else
 echo "Ошибка выгрузки на Ftp сервер"
fi

Создаем необходимые папки на локальном сервере и на FTP сервере.

Добавляем задание в cron с условием выполнения 2 и 16 числа каждого месяца в 4:00:

0 4 2,16 * * /bin/sh /home/www/site_backup.sh

Дополнительно: возможно на сервере Linux не будет установлен FTP-клиент и команда ftp не будет выполнена. В таком случае необходимо установить клиент:

yum install ftp 
или 
apt-get install ftp

Top