Бэкап блога в почту
  • Без рубрики
  • 0

Бэкап блога в почту

Очередная короткая заметка по текущим делам: сделал автоматический ежедневный бекап всей базы блога в почту.

Для получения архива базы блога воспользуемся утилитой mysqldump. Она принимает параметры:

-u имя_юзера -pпароль название_базы

Обратите внимание, пароль пишется без пробела сразу после -p. Название базы вордпресса — «wordpress», если вы его не меняли при установке. После выполнения этой команды в stdout прилетит весь архив. Мы сразу завернём его пайпом в упаковщик gzip:

mysqldump -u user -ppassword wordpress | gzip

А результат его работы — в файл с именем, содержащим сегодняшнюю дату:

mysqldump -u user -ppassword wordpress | gzip > `date +/root/blog.%Y%m%d.gz`

Эта магия работает так: утилита date рассматривает параметр после «+» как форматную строку, примерно как функция printf в си. Литералы %Y, %m и %d соответственно заменяются на год, месяц и дату, а остальные символы остаются без изменений. Вся полученная строка отдаётся в stdout, но команда завёрнута в обратные кавычки — поэтому результат её работы передаётся в команду «gzip > …», что заставляет shell записать вывод команды gzip в указанный файл.

Теперь измерим размер этого файла:

du `date +/root/blog.%Y%m%d.gz` -BK | cut -f1

du сообщает размер выбранного файла, а параметр -BK переводит размер в килобайты. Результат работы команды — таблица с полями «размер» и «имя файла», поэтому вырежем первую колонку командой cut с параметром -f1.

Вот уже в двух местах использовано одинаковое имя файла, поэтому стоит перейти на shell-скрипты.

#!/bin/bash
file=`date +/root/blog.%Y%m%d.gz`
mysqldump -u user -ppassword wordpress | gzip > $file
size="Размер архива: "`du $file -BK | cut -f1`" байт"
echo $size

Ну и наконец, последний шаг — отправка всего архива по email. Используем утилиту mutt, которая является фронтендом к Sendmail и умеет отправлять письма со вложениями. Установим её:

sudo apt-get install mutt

Очень легко использовать:

echo "Текст письма" | mutt -s "Тема письма" catethysis@catethysis.ru -a blog.20141128.gz

Параметр -s это тема письма, параметр -a это вложенный файл. Без параметра передаётся адрес получателя, а текст забирается из stdin.

Итоговый скрипт выглядит так:

#!/bin/bash
file=`date +/root/blog.%Y%m%d.gz`
mysqldump -u user -ppassword wordpress | gzip > $file
size="Размер архива: "`du $file -BK | cut -f1`" байт"
echo $size | mutt -s "Бэкап блога" catethysis@catethysis.ru -a $file

Последнее что нужно сделать — назначить задание для cron:

crontab -e

Если спросит — выбирайте nano, это самый простой редактор из предложенных. Он даже отмечен указателем «<=== easiest» :)

Принцип назначения заданий очень прост, по колонкам:

  1. минуты
  2. часы
  3. день месяца
  4. месяц
  5. день недели

Значение * означает «любой». Таким образом, для ежедневного выполнения задания в определённое время нужно написать такое расписание: «0 6 * * *»: любой день месяца и недели, любой месяц, но так чтобы минуты равнялись 0, а часы — 6. Это соответствует 06:00 каждого дня. Не забудьте про временные зоны! Мой сервер находится в Амстердаме, там действует Центральноевропейское время. 6 утра в Москве превращаются в 4 утра. Хотя можно и переставить часовой пояс.

0 6 * * * ./blog_backup_pack_send.sh

Укажите там имя файла вашего скрипта.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *