При проблемах с сайтом или хостингом администратор проекта должен иметь возможность быстро вернуть сайт в рабочее состояние. Для этих целей можно периодически создавать дубликат данных сайта: файлов и базы данных. Этот процесс называется резервным копированием, или бэкапом. При наличии бэкапа администратор сайта в любой момент вернёт работоспособность сломанного сайта или, в некоторых случаях, перенесет сайт на другой сервер.
Резервное копирование - процесс важный, но затратный по времени, если выполнять его вручную. Поэтому создание бекапа стараются автоматизировать, особенно, когда сайт часто обновляется и дубликат надо создавать ежедневно.
Мы сделали процесс резервного копирования бесплатным и сделали возможность использовать только встроенные возможности сервера без стороннего программного обеспечения.
В этой статье Вам будет выдан скрипт для выполнения всей рутинной работы по резервному копированию.
Данный скрипт позволяет создавать резервную копию каждый день и хранить их 7 дней, затем он удалит самую старую резервную копию на 8-й день выполнения скрипта
Конфигурация скрипта:
#!/bin/bash
WWW_PATH=/var/www/html # вместо /var/www/html - Директория сайта для резервной копии
FTP_HOST="FTP_IP" # вместо FTP_IP - IP-адрес FTP сервера
FTP_USER="FTP_USERNAME" # вместо FTP_USERNAME - Имя FTP пользователя
FTP_PWD="FTP_PASSWORD" # вместо FTP_PASSWORD - Пароль FTP пользователя
DB_HOST="127.0.0.1" # вместо 127.0.0.1 - IP сервера Базы Данных
DB_USER="DB_USERNAME" # вместо DB_USERNAME - Пользователь Базы данных
DB_PWD="PASSWORD" # вместо PASSWORD - Пароль от Базы данных
CURRENT_TIMESTAMP=$(date +%Y-%m-%d-%H-%M)
mysqldump -A -u "$DB_USER" -h "$DB_HOST" -p "$DB_PWD" --ignore-table=mysql.innodb_index_stats --ignore-table=mysql.innodb_table_stats > "./mysqldump.sql"
tar -zc --file "./dump-$CURRENT_TIMESTAMP.tar" "$WWW_PATH" "./mysqldump.sql"
ftp -n $FTP_HOST <<END_SCRIPT
quote USER $FTP_USER
quote PASS $FTP_PWD
binary
put ./dump-$CURRENT_TIMESTAMP.tar
quit
END_SCRIPT
rm -f "./dump-$CURRENT_TIMESTAMP.tar" "./mysqldump.sql"
ndays=7
MM=`date --date="$ndays days ago" +%b`
DD=`date --date="$ndays days ago" +%d`
echo removing files older than $MM $DD
listing=`ftp -i -n $FTP_HOST <<EOMYF
quote USER $FTP_USER
quote PASS $FTP_PWD
binary
ls
quit
EOMYF
`
lista=( $listing )
for ((FNO=0; FNO<${#lista[@]}; FNO+=9));do
if [ ${lista[`expr $FNO+5`]}=$MM ];
then
if [[ ${lista[`expr $FNO+6`]} -lt $DD ]];
then
echo "Removing ${lista[`expr $FNO+8`]}"
ftp -i -n $FTP_HOST <<EOMYF2
quote USER $FTP_USER
quote PASS $FTP_PWD
binary
delete ${lista[`expr $FNO+8`]}
quit
EOMYF2
fi
fi
done
exit 0
В комментариях к скрипту указаны все параметры, которые Вам нужно указать для его верной работоспособности
Запуск скрипта:
Запуск происходит через cron: для этого на нашем хостинге в панели есть специальный раздел с настройкой CRON - "Планировщик".
Основа использования cron – выполнение задач в определённое время, как показано ниже. Это будет выполнять скрипт резервного копирования написанный нами 10 июня в 8.30.
Пожалуйста, обратите внимание, что поле времени использует 24-часовой формат, Так что 8 АМ – 8, 8 РМ – 20 часов.
30 08 10 06 * /home/developer/name_of_your_script
30 – 30-ая минута
08 – 08 АМ
10 – 10-й день
* – каждый день недели
Этот скрипт выполняет простую задачу: создаёт файлы, чтобы сломанный по каким-то причинам сайт можно было вернуть в рабочее состояние. Вы можете взять за основу этот bash-скрипт и дополнить его своим кодом под ваши потребности. Для написания bash-скриптов в Интернете можно найти множество мануалов с готовыми примерами кода.