Задать вопрос
DedalX
@DedalX
Web разработчик, IT бизнесмен

Как организовать удобное и простое (Files ZIP+MySQL Dump) автоматическое резервное копирование на сервере?

Имеется веб-сервер на Linux с Parallels Plesk Panel. В панеле есть резервное копирование, но оно слишком сложное, работает медленно, и хранит файлы на сервере по куче непонятных папок кусками.

Подскажите как настроить автоматическое простое резервное копирование на сервере (видимо по SSH и через какие то shell скрипты/конфиги) которое будет работать следующим образом:
1) Делает MySQL дамп ВСЕХ баз данных на локальном сервере и пакует их в ZIP (или TAR/GZIP, что быстрее работает) архивы в папку /backup/текущая_дата/mysql/ . Каждая база данных - отдельный архив с ее именем.
2) Пакует в ZIP archive (или TAR/GZIP, что быстрее работает) все поддиректории с файлами в главном каталоге где находятся файлы сайтов ( /var/www/vhosts/domain.com/ ), КРОМЕ папок error_docs, logs и httpdocs) в в папку /backup/текущая_дата/www/ . Каждая папка в главном каталоге (это домены) - отдельный архив.
3) Запаковка архивов не должна нагружать сервер (и замедлять работу сайтов на нем во время выполнения), степень сжатия файлов не так важна, главное чтобы работало быстро и без нагрузки
4) Бекап выполняется каждую неделю в указанное время (например в субботу в 00:00) и возможен запуск вручную командой
5) Отправляет мне email, что backup закончен с логом (какие архивы были созданы и их вес, время исполнения)

Подскажите как все это организовать? (как я понимаю нужен простенький скрипт). Спасибо!
  • Вопрос задан
  • 452 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
martin74ua
@martin74ua Куратор тега Linux
Linux administrator
[root@backup ~]# cat /etc/cron.daily/backup_db.sh
#! /bin/bash -

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

MYSQL_SERVERS="srv01.db.com srv02.db.com"
DATE=`date +%Y.%m.%d-%R`
BACKUP_PATH="/mnt/backup/db"
BACKUP_EXT=".sql.bz2"
SAVE_DAYS="14"

DB_LOGIN="backup"
DB_PASS="тут сложный пароль"

for srv in ${MYSQL_SERVERS}
do
if [ ! -d ${BACKUP_PATH}"/"${srv} ]; then
echo "Directory for ${srv} doesn't exists, creating..."
mkdir ${BACKUP_PATH}"/"${srv}
fi
for db in `mysql -h ${srv} -u${DB_LOGIN} -p${DB_PASS} -e 'show databases' | tail -n +2 | egrep -v "lost\+found|\.snap|information_schema|performance_schema"`
do
echo "Dumping database ${db} on ${srv}"
mysqldump -h ${srv} -u${DB_LOGIN} -p${DB_PASS} --add-drop-database --add-drop-table --add-locks --create-options -e -F --flush-privileges -l -q -B ${db} | \
bzip2 -9c > "${BACKUP_PATH}/${srv}/${db}_${DATE}${BACKUP_EXT}"
echo
done
done
find ${BACKUP_PATH} -mindepth 1 -mtime +${SAVE_DAYS} -delete -exec echo "Deleting old file: " {} \;

скрипт крутится уже с пару лет, бекапит все базы на всех перечисленных серверах
ну как настроить привилегии расписывать надо?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы