Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Sanja v.2 02.09.2007 18:27 / 03.09.2007 01:13
Начитавшись про вирусы, крадущие FTP-пароли и прочий беспредел, решил сваять небольшой скриптик, который делает архив выбранной папки и базы MySQL и высылает его на email./home/users/полный/путь от корня к/emailbackup.cgi >/dev/null 2>&1и укажите, чтобы она запускалась раз в сутки по ночам ("волчий час" - пять утра, когда загрузка хостинга минимальна, сойдёт).
#!/bin/sh # Скрипт для высылки бэкапов сайта на почту. # Настройки доступа к MySQL-базе, которую вы хотите бэкапить: DBNAME="имя_базы" DBUSER="логин_mysql" DBPASS="ваш_пароль_mysql" # Имя папки, всё содержимое которой надо бэкапить (без слэша на конце): files_to_backup="/home/бла-бла-бла/html" # Имя пустой временной папки за пределами wwwroot, # в которую у вас есть права записи. Путь от корня, без слэша на конце: TempFiles="/home/бла-бла-бла/TempFiles" # Имя временного файла, в который будет запакован бэкап MySQL # (вложение в письмо будет называться так:) mysql_backup_filename=$TempFiles/mysql_backup.sql.gz files_backup_filename=$TempFiles/files_backup.tar.gz # (эти файлики будут удалены в конце работы скрипта!) # Путь к sendmail; postfix или msmtp тоже сгодятся: sendmail=/usr/sbin/sendmail # Параметры отправляемого сообщения: from=robot@бла-бла-бла.com recipient=бла-бла-бла@yahoo.com # Subject лучше писать латиницей! subject="Backup of бла-бла-бла,com" ################################################### # Больше ничего редактировать не надо! (наверное) # printf "Content-Type: text/plain; charset=WINDOWS-1251\n\n" echo "Начинаем бэкап..." echo "Делаем дамп базы MySQL и пакуем его..." # параметр -с запуска gzip означает, что файл для сжатия надо брать со stdin 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 <<ENDBLOCK Date: $msgdate From: $from To: $recipient Subject: $subject [$msgdate] Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="$boundary" Content-Disposition: inline --$boundary Content-Type: text/plain; charset=windows-1251 Content-Disposition: inline Бэкап вашей базы MySQL и файлов, сделанный $msgdate --$boundary Content-Type: $mimetype;name="$attachment_mysql" Content-Disposition: attachment; filename="$attachment_mysql" Content-Transfer-Encoding: base64 ENDBLOCK echo >> msg.tmp echo "Перекодируем дамп MySQL в base64..." uuencode -m $mysql_backup_filename $attachment_mysql | sed '1d' >> msg.tmp cat >> msg.tmp <<ENDBLOCK --$boundary Content-Type: $mimetype;name="$attachment_files" Content-Disposition: attachment; filename="$attachment_files" Content-Transfer-Encoding: base64 ENDBLOCK echo "Перекодируем архив с файлами в base64..." uuencode -m $files_backup_filename $attachment_files | sed '1d' >> 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 "Готово!"Раз уж начали стелить соломку, позаботьтесь и о домашнем компьютере. Если у вас толстый безлимитный канал в интернет, подпишитесь на сервис https://mozy.com/registration/free (пакет "Free"), чтобы наиболее важные вам папки бэкапились на этот сайт (квота до двух гигабайт - бесплатно, можно шифровать данные своим ключом). Эта штуковина меня не раз спасала от потери сглюкнувшего почтового файла Outlook Express и случайно удалённой мимо "Корзины" папки со всеми файлами сайта. Первый бэкап будет идти долго, последующие инкрементные бэкапы вы замечать не будете - отсылаются только изменённые части файлов.