Резервное копирование MySQL и всех файлов web сервера

Сегодня наконец озаботился резервным копированием своего сайта. Всегда считал, что складировать всю БД и все файлы с сервера более безопасное дело, чем пользоваться встроенными средствами. Во всяком случае для не сильно динамично изменяющихся сайтов, хотя для динамически изменяющихся (например форумы) можно и остановку сделать. Был написан скрипт для этого. Скрипт простейший. И просто запускается по крону раз в день. Так что сначала объясню команды, которые создают и разворачивают резервную копию.

Архивы будут создаваться в той папке, из которой были запущены команды.

Создать резервную копию всех файлов, а так же сжать все в 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-инфраструктуре — это быть уверенным в завтрашнем дне.

Для того, чтобы сделать заказ:

Заполните форму обратной связи и мы обязательно с вам свяжемся:
Форма обратной связи
Позвоните нам по телефону:
+7(909)952-44-33
Напишите нам на электронную почту:
order@blackdiver.net
Напишите нам в Telegram:
Telegram
Другие способы связи Вы сможете найти в разделе Контакты.