Автобекап MySQL и отправка файла на E-mail

Статус
В этой теме нельзя размещать новые ответы.

whitelex

Постоялец
Регистрация
5 Апр 2008
Сообщения
59
Реакции
3
Предлагаю такой несложный скрипт для создания резервных копий БД и отправки файла на Е-mail пользователя.

PHP:
<?php
#---Настроки---#
$user = ""; // Имя пльзователя БД
$pwd = ""; // Пароль для подключения БД
$db = ""; // База данных
$email_from = ""; // Емаил отправителя
$email_subject = "MySQL Backup file created"; // Тема сообщения
$email_txt = ""; // Текст сообщения
$email_to = ""; // Адрес получателя

//Путь к папке сохранения 
$path = "/home/$user/public_html/backup"

#---Следующие параметры не менять---#
$date = date("d-m-Y_G:i");
$file = $db."_".$date.".sql.gz";
exec("mysqldump -u$user -p$pwd --databases $db | gzip > $path/$file");

$fileatt = "$path/$file"; 
$fileatt_type = "application/octet-stream"; 
$fileatt_name = "$file"; 
$headers = "From: ".$email_from;
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
$email_message .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$email_message . "\n\n";
$data = chunk_split(base64_encode($data));
$email_message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
//"Content-Disposition: attachment;\n" .
//" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";
mail($email_to, $email_subject, $email_message, $headers);
?>
Если скрипт запускается создает копии и отправляет сообщение на ящик, то создаем задание в cron job, пример:
PHP:
 	 php -q /home/USERNAME/public_html/backup/mysql_backup.php
 
с использование exec не самое лучшее решение...
 
Можно еще так, в /etc/cron.daily кладем исполняемый файл

Код:
#!/bin/sh
cd /backup; a=`date`; mysqldump -uлогин -pпароль база | gzip > "$a.gz"; uuenview -m почтовый@адрес -b -a "$a.gz"

В результате копирование будет проходить ежедневно, а на почту станет приходить база в сжатом виде, она же будет в директории /backup.
 
второй варинат более качественный на мой взгляд, но это уже не ПХП =)
если делать на ПХП то нужно слить базу через него же, и затем ее упаковать и отправить как, да просто посомтрите как в ПХП МайАдмине стелан экспорт... и все
 
а для форума типо EXBB где базы данных нет...
например для WordPress еcть плагин wp-db-backup, а для EXBB?
 
с использование exec не самое лучшее решение...
Обоснуйте, пожалуйста :)

Добавлено через 3 минуты
Можно еще так, в /etc/cron.daily кладем исполняемый файл
Код:
#!/bin/sh
cd /backup; a=`date`; mysqldump -uлогин -pпароль база | gzip > "$a.gz"; uuenview -m почтовый@адрес -b -a "$a.gz"
В результате копирование будет проходить ежедневно, а на почту станет приходить база в сжатом виде, она же будет в директории /backup.

А как можно таким же образом сделать бекап файлов, но без отправки на мыло, просто, складывая в одну папку? Есть ли варианты ограничивающие количество создаваемых бекапов, чтобы уменьшить расход занимаемого диск. пространства?
 
делать backup умеет любая панель управления, удаление старых архивов тоже задумано в панели. В Google вариантов немеряно, запрос типа .sh бекап выдал



Удалять старые файлы можно так, в файл delete-36000.sh пишем

Код:
#! /bin/sh

if [ -z "$1" ]; then
    DIR="`user`"
else
    DIR="$1"
fi

find $DIR -mmin +600 -type f -exec rm -rf {} \;

в cron пишем

/delete-36000.sh /path_to_backup_dir

find $DIR -type f -mtime +N -exec rm {} \;
Удалит файлы старше N дней

P.S. хранить backup на том же сервере, плохая затея
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху