Сегодня наконец озаботился резервным копированием своего сайта. Всегда считал, что складировать всю БД и все файлы с сервера более безопасное дело, чем пользоваться встроенными средствами. Во всяком случае для не сильно динамично изменяющихся сайтов, хотя для динамически изменяющихся (например форумы) можно и остановку сделать. Был написан скрипт для этого. Скрипт простейший. И просто запускается по крону раз в день. Так что сначала объясню команды, которые создают и разворачивают резервную копию.
Архивы будут создаваться в той папке, из которой были запущены команды.
Создать резервную копию всех файлов, а так же сжать все в gz
tar -cvzf `date +blackdiver.net.files.%d-%m-%Y.%H-%M-%S.tar.gz` -C /sites/blackdiver.net/www/ .
опишем используемые параметры:
-c создать архив.
-v подробный вывод процесса (люблю я подробный вывод).
-z сжать все с помощью gzip.
-f указываем имя файла, причем следующей командой формируется имя файла с датой создания.
date +blackdiver.net.files.%d-%m-%Y.%H-%M-%S.tar.gz добавляем к команде date имя файла.
-C /sites/blackdiver.net/www/ . (именно с точкой в конце) указываем рабочий путь. Чтобы пути в архиве начинались с папки, где лежат файлы сайта, а не с абсолютного пути (абсолютный путь на сервере: /sites/blackdiver.net/www/)
Развернуть резервную копию
tar –xvf blackdiver.net.files.tar.gz -C /sites/blackdiver.net/www/
-x извлечь из архива
-f извлекать будем из файла
blackdiver.net.files.tar.gz имя файла, из которого извлекаем.
-C в папку /sites/blackdiver.net/www/
То же самое делаем с базой данных.
Создать резервную копию БД
mysqldump -uAdmin -pSuperPass -h mysql.blackdiver.net db_blackdiver | gzip > `date +blackdiver.net.sql.%d-%m-%Y.%H-%M-%S.gz`
mysqldump утилита для создания дампа базы данных
-u указываем пользователя, которым будем подключаться. Имя пользователя после параметра пишется без пробела (-uAdmin)
-p использовать пароль. Пароль так же пишется без пробела (-pSuperPass)
-h указываем сервер БД (сервер mysql.blackdiver.net).
db_blackdiver имя базы данных, с которой снимаем резервную копию.
Далее все, что выдается передаем в gzip и говорим сохранить в файл (название файла формируется так же, как и для создания файловой резервной копии)
Развернуть бекап базы данных
gunzip < blackdiver.net.sql.gz | mysql -uAdmin -pSuperPass -h mysql.blackdiver.net db_blackdiver
Тут все с точностью наоборот. Разворачиваем архив в gunzip и передаем его в утилиту mysql для загрузки в БД.
Как настроить синхронизацию с Google Drive я рассказываю в статье: Grive синхронизация папок с Google Drive
А теперь собственно сам скрипт.
#! /bin/bash
#Узнаем текущую дату и время, чтобы добавить их в имя файла
DATE=$(date +%d-%m-%Y.%H-%M-%S)
# Название сайта. Оно же начало имени файла резервной копии
SITE_NAME='blackdiver.net'
#Куда будем складывать резервные копии
BACKUP_DIR='/mnt/data/blackdiver.net/backup'
#Папка, которая синхронизируется с Google Drive
GDRIVE_DIR='/mnt/data/googledrive'
#путь до файлов web-сервера
WEB_DIR='/mnt/data/blackdiver.net/www/'
#имя пользователя SQL
SQL_USER='Admin'
#пароль SQL
SQL_PASS='SuperPass'
#сервер SQL
SQL_HOST='mysql.blackdiver.net'
#база данных, которую будем копировать
SQL_DB='db_blackdiver'
#Меняем директорию на ту, где будут лежать резервные копии.
cd $BACKUP_DIR
#Делаем резервное копирование
tar -cvzf $SITE_NAME'.files.'$DATE'.tar.gz' -C $WEB_DIR .
mysqldump -u$SQL_USER -p$SQL_PASS -h $SQL_HOST $SQL_DB | gzip > $SITE_NAME'.sql.'$DATE'.gz'
#Копируем резервные копии в папку для синхронизации с Google Drive
cp -r $BACKUP_DIR $GDRIVE_DIR
#Переходим в эту папку
cd $GDRIVE_DIR
#Синхронизируем
grive
Данная статья устарела. Новая версия статьи:Скрипт резервного копирования сайта с шифрованием и выгрузкой на Яндекс.диск
Заказать создание и поддержку безопасной IT-инфраструктуры любой сложностиБыть уверенным в своей IT-инфраструктуре – это быть уверенным в завтрашнем дне. Для того, чтобы сделать заказ:
|