Главная | Контакты



Главная > Программы > MySQL

MySQL backup с доставкой по e-mail

Каждые сутки по cron'у у меня создается бекап (дамп) базы MySQL как для этого блога, так и для других ресурсов. Бекапы складывается на жестком диске и периодически, опять таки по крону, удаляются очень старые архивы. Однако, как говорит Гугло-Почта "Зачем удалять, когда есть более 6-ти гигабайт места?":

А действительно, зачем? Осталось только автоматизировать процесс отправки дампов mysql по электронной почте, что впрочем не сложно. Сразу стоит вспомнить о трафике, который будет зависеть от размера дампов, но меня этот вопрос, к счастью, пока не особо беспокоит.

Когда я собрался настраивать то, что будет описано ниже, я сразу вспомнил о консольном почтовом клиенте nail, которым пользовался последний раз три года назад. nail - это аналог обычного mail, только имеет одну очень нужную опцию, коей не имеет mail: с ключиком "-a" nail'ом можно из консоли отправлять вложения в теле письма. А нам в данном случае это и требуется.



Отправить вложения с помощью команды mail в принципе можно. Классический вариант: использование команды uuencode. Вот, например, так можно отправить письмо, используя base64 кодирование:

$ uuencode -m input-file.bin output-file.bin | mail -s "Binary Atachment" admin@yahoo.com

Но письмо прийдет к получателю в виде "текста", который еще нужно будет перекодировать обратно. Не удобно: Вариант отпадает. Юзаем nail!

Сразу, как-то машинально полез в порты, в папку /usr/ports/mail/nail, но как оказалось, не существует такой папки в дереве портов. Что же это? Проект прикрыли? Ан-нет.

daemony# cd /usr/ports/
daemony# make search name="nail"
:
Port: mail/nail
Moved: mail/heirloom-mailx
Date: 2006-11-05
Reason: Project name changed

Ага. Проект поменял свое название. Да и к тому же достаточно давно. Что ж:

daemony# make search name="mailx"
Path: /usr/ports/mail/heirloom-mailx
Info: BSD mail utility with MIME, IMAP, POP3, SMTP, and S/MIME extensions
Maint: ports@logvinov.com
B-deps: libiconv-1.11_1
R-deps: libiconv-1.11_1
WWW: http://heirloom.sourceforge.net/mailx.html

Port: mailx-0.5
Path: /usr/ports/mail/mailx
Info: Mail command with mailx extensions
Maint: ports@FreeBSD.org
B-deps: perl-5.8.8_1
R-deps: perl-5.8.8_1
WWW:

Вот такие премудрости умеет эта маленькая программка. Ставим!

daemony# portinstall mailx
[Gathering depends for mail/mailx . done]
-> Installing 'mailx-0.5? from a port (mail/mailx)
-> Building '/usr/ports/mail/mailx'
:
===> Registering installation for mailx-0.5
===> Cleaning for mailx-0.5

Исходники весят 87 килобайт. Отлично. Итак, программка есть, осталось написать скриптик и запихать его в крон.

daemony# cat /home/daemony/scripts/sql-send-my-email.sh
#!/bin/sh
#########################################
# mysql-backup-and-send-by-email script #
#########################################

db="portal"
USER="portal"
PASS="secretword"
WRK="/home/daemony/backup/mysql"

 `/usr/local/bin/mysqldump -u $USER -p$PASS -B $db > $WRK/$db.sql`
 `/usr/bin/gzip -cf9 $WRK/$db.sql > $WRK/$db'_'$(date +%Y-%m-%d).gz`
 `/bin/rm $WRK/$db.sql`
 `/bin/echo "SQL dump of $BASE. Date $(date +%Y-%m-%d)" |
 /usr/local/bin/mailx -a $WRK/$db'_'$(date +%Y-%m-%d).gz \
 -s "SQL Dump $(date +%Y-%m-%d)" g00gl0p0chta@gmail.com`
 `/bin/rm $WRK/$db'_'$(date +%Y-%m-%d).gz`

Скармливаем скрипт крону:

daemony# crontab -e
#
# Crontab configuration file for daemony
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/home/daemony
#
00 01 * * * /home/daemony/scripts/sql-send-my-email.sh

Вот и все. Для теста можно попробовать вручную запустить скрипт и проверить, как доходят письма. Учтите, что при отправке слишком больших бекапов Ваш локальный SMTP может послать Вас в сад, в связи с очень большим размером письма. Потому, если Ваши базы быстро вырастают доставлять их до конца жизни на Gmail не получится.


Для бекапа базы данных Wordpress есть отличный плагин Домашняя страница автора плагина wp-db-backup. Он и бекапит и отправляет сжатый дамп по электронной почте. Также умеет делать это по расписанию без Вашего участия.


Главная > Программы > MySQL