Автобекап 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
 

CrashX

В прошлом XSiteCMS
Регистрация
6 Июн 2008
Сообщения
682
Реакции
114
с использование exec не самое лучшее решение...
 

porsche2

Мой дом здесь!
Регистрация
18 Ноя 2007
Сообщения
669
Реакции
234
Можно еще так, в /etc/cron.daily кладем исполняемый файл

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

В результате копирование будет проходить ежедневно, а на почту станет приходить база в сжатом виде, она же будет в директории /backup.
 

CrashX

В прошлом XSiteCMS
Регистрация
6 Июн 2008
Сообщения
682
Реакции
114
второй варинат более качественный на мой взгляд, но это уже не ПХП =)
если делать на ПХП то нужно слить базу через него же, и затем ее упаковать и отправить как, да просто посомтрите как в ПХП МайАдмине стелан экспорт... и все
 

Hilo

Хранитель порядка
Регистрация
31 Мар 2008
Сообщения
929
Реакции
602
а для форума типо EXBB где базы данных нет...
например для WordPress еcть плагин wp-db-backup, а для EXBB?
 

whitelex

Постоялец
Регистрация
5 Апр 2008
Сообщения
59
Реакции
3
с использование exec не самое лучшее решение...
Обоснуйте, пожалуйста :)

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

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

porsche2

Мой дом здесь!
Регистрация
18 Ноя 2007
Сообщения
669
Реакции
234
делать 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 на том же сервере, плохая затея
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху