Практически любой динамический сайт состоит из двух связных компонентов: директории с файлами и базой данных. Хорошей практикой является выполнение регулярного резервного копирования. Автоматизировав этот процесс можно закрыть сразу несколько вопросов, таких как защита от потери данных, уменьшение срока восстановления системы после атаки хакеров или заражения вирусом.
Для наглядности разобъем резервное копирование на нескольких простых и понятных этапов:
- Подготовка резервной копии баз данных
- Подготовка архива файловой структуры
- Передача файлов на FTP
- Очистка старых копий
- Настройка расписания запуска скрипта
Самая распространенная база данных на хостингах планеты — Mysql. Команда для выполнения резервного копирования — mysqldump. Но просто сделать резервную копию недостаточно. Гораздо профессиональнее разложить резервные копии по папкам с датами. Это позволит в будущем легко найти нужный временной период и получить файлы для восстановления.
Все команды, написанные ниже, выполняются на хостинге с операционной системой linux Ubuntu. Однако они применимы и в ряде других, аналогичных ОС.
#!/bin/bash
# Текущая дата в формате YYYY-MM-DDCURDATE=`date +%F`
# Абсолютный путь к папке, в которой мы будем хранить резервные копииBACKUPSPATH=`/backup-sites`
# Абсолютный путь к папке, в которой лежат наши сайтыSITESPATH=`/sites`
# В папке с резервными копиями создаем директорию с текущей датойmkdir $BACKUPSPATH/$CURDATE
# Массив с названиями баз данныхarrDBases=( \«site1_ru» \«site2_ru» \)
# Массив с директориями сайтовarrDirectories=( \«site_1» \«site_2» \)
# Бежим по массиву баз данных и выполняем команду mysqldumpfor unitDBase in «${arrDBases[@]}»do# Пароль от root сохранен в домашней директории пользователя в файле .my.cnfmysqldump —routines -u root $unitDBase > $BACKUPSPATH/$CURDATE/$CURDATE.sql.$unitDBase.sql# Архивируем полученный дамп базы данныхgzip -9 $BACKUPSPATH/$CURDATE/$CURDATE.sql.$unitDBase.sqldone
# Переходим в корневую папку с сайтамиcd $SITESPATH
# Бежим по массиву папок и создаем архив файловой структурыfor unitDir in «${arrDirectories[@]}»do# Склеивание всех файлов в один несжатый архивtar -cf $BACKUPSPATH/$CURDATE/$CURDATE.www.$unitDir.tar $unitDir# Архивацияgzip -9 $BACKUPSPATH/$CURDATE/$CURDATE.www.$unitDir.tardone
# Переходим в папку, в которой лежат подготовленные к отправке файлыcd $BACKUPSPATH/$CURDATE
# Вход на FTP-сервер# Команды FTP-сервераftp -p -i -z nossl ENTER_YOU_REMOTE_SERVER_IP_OR_DOMAIN <<INPUT_ENDcd /path/to/ftp/dirmkdir $CURDATEcd $CURDATEmput *.gzquitINPUT_END
# Удаляем резервные копии, старше 3-х дней/usr/bin/find $BACKUPSPATH -name «*» -type d -mtime +3 -exec rm -rf {} \;