MySQLБекап базы на почту!



Простой скрипт, отправляет нужную базу и папку с файлами на имейл. Чтобы выполнять по крону, нужно в /etc/crontab добавить
30 1,16 * * * root /usr/local/etc/backup.sh 

Файлы архивов имеют имена mysql_backup.sqlgz и files_backup.targz. Чтобы их распаковать, нужно переименовать их в files_backup.tar.gz и mysql_backup.sql.gz. (Иначе gmail отбивает письма.)
Текст скрипта:
#!/bin/sh
# Скрипт для высылки бэкапов сайта на почту.
# Настройки
доступа к MySQL-базе, которую вы хотите бэкапить: DBNAME="db" DBUSER="root"
DBPASS="pass"
# Имя папки, всё содержимое которой надо бэкапить (без
слэша
на конце): files_to_backup="/usr/home/admin/dir"
# Имя пустой
временной
папки за пределами wwwroot, # в которую у вас есть права
записи.
Путь от корня,
без слэша на конце:
TempFiles="/usr/home/admin/tmp"
# Имя
временного файла,
в
который
будет запакован бэкап MySQL # (вложение в письмо
будет
называться
так:)
mysql_backup_filename=$TempFiles/mysql_backup.sqlgz
files_backup_filename=$TempFiles/files_backup.targz # (эти файлики будут
удалены
в конце работы скрипта!)
# Путь к sendmail; postfix или
msmtp
тоже сгодятся:
sendmail=/usr/sbin/sendmail
# Параметры
отправляемого
сообщения: from=admin@mail.net recipient=backup@gmail.com #
Subject лучше писать латиницей! subject="backup"
################################################### # Больше ничего
редактировать не надо! (наверное) #
printf "Content-Type: text/plain;
charset=WINDOWS-1251\n\n"
echo "Начинаем бэкап..." echo "Делаем дамп
базы
MySQL и пакуем его..." # параметр -с запуска gzip означает, что
файл
для сжатия

надо брать со stdin

/usr/local/bin/mysqldump --opt --quote-names -u
$DBUSER
-p$DBPASS $DBNAME
gzip -9c > $mysql_backup_filename
echo
"Архивируем
файлы..." # опция "-f
-" означает, что архив
надо отправлять
в stdout tar
--create
--exclude='parser3.cgi'
--exclude='*.so' \ --file
-
$files_to_backup
gzip \ -9c >
$files_backup_filename
echo
"Создаём
текст сообщения
для
отправки..." msgdate=`date +"%a, %d %b %Y
%T %z"`
boundary="0__=4CBBF9D3DFA196658f9e8a93df938690918c4CBBF9D3DFA19775"
attachment_mysql=`basename "$mysql_backup_filename"`
attachment_files=`basename
"$files_backup_filename"`
mimetype="application/x-gzip"
cat > msg.tmp
< name="$attachment_mysql" filename="$attachment_mysql" > > msg.tmp
echo
"Перекодируем дамп MySQL в base64..."
uuencode -m
$mysql_backup_filename
$attachment_mysql sed '1d' > > msg.tmp
cat
> > msg.tmp < >
msg.tmp
# печатаем последнюю
строку
email-сообщения: echo -e
"\n--$boundary--" > > msg.tmp
echo
"Отправляем
письмо на адрес
$recipient ..." cat msg.tmp
$sendmail -t
echo "Прибираемся
за собой..."
rm msg.tmp rm
$mysql_backup_filename
rm $files_backup_filename
echo


«Готово!»

По крону от рута приходили пустые дампы баз, рут не видел mysqldump, потому вбил в скрипте полный путь /usr/local/bin/mysqldump. Дампы приходят.

Предположительный автор скрипта Sanja v.2
Источник: andrej-cv.blog.ru
  • +12
  • BANDIT
  • 09 июля 2009, 05:13

Комментарии (11)

Спасибо. Очень полезный скрипт.
Спасибо! Как раз, то что надо.
Я писал для этой цели скрипт на php на базе Sypex Dumper)
в студию скрипт =)
Дело в том, что скрипт дома валяется на харде, потом дам.
Аналогично, тоже на базе этого дампера писал такой же скрипт )))
Могу скинуть, если интересно!)
интересно… кидай =)
вдохновился темой и написал что я бэкаплю и как у себя :)
Поясните в чем смысл этой строчки «charset=WINDOWS-1251». Она просто выводит текст о том, что кодировка WINDOWS-1251, но где эта кодировка устанавливается?
я попроще использую:

EMAIL="%электропочта%"
DATE="date +%Y%m%d-%H%M%S-%Z"
HOSTNAME=%хост%
DBNAME=%база%
DBPASS=%пароль%
DBUSER=%пользователь%

tar zcf %сайт%-$DATE.tar.gz %каталог сайта%
mysqldump --host=%хост% --user=%пользователь% --password=%пароль% %база% > dump.sql
gzip backup.sql
mv backup.sql.gz $HOSTNAME-$DBNAME-$DATE.sql.gz
echo "Бэкап $DBNAME на $HOSTNAME сделанный $DATE" | mutt -a $HOSTNAME-$DBNAME-$DATE.sql.gz $EMAIL -s "Бэкап $DBNAME на $HOSTNAME"
mv $HOSTNAME-$DBNAME-$DATE.sql.gz %каталог для бэкапа%
ошибся малость, когда переписывал с рабочей версии :)
dump.sql = backup.sql
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.