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
Источник:
- +12
- BANDIT
- 09 июля 2009, 05:13
Могу скинуть, если интересно!)
dump.sql = backup.sql