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
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.