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

Тема в разделе ".:: Готовые решения", создана пользователем whitelex, 19 авг 2010.

Статус темы:
Закрыта.
  1. whitelex

    whitelex Постоялец

    Регистр.:
    5 апр 2008
    Сообщения:
    58
    Симпатии:
    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 -/home/USERNAME/public_html/backup/mysql_backup.php
     
  2. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    с использование exec не самое лучшее решение...
     
  3. porsche2

    porsche2

    Регистр.:
    18 ноя 2007
    Сообщения:
    667
    Симпатии:
    210
    Можно еще так, в /etc/cron.daily кладем исполняемый файл

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

    CrashX В прошлом XSiteCMS

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

    Hilo

    Moderator
    Регистр.:
    31 мар 2008
    Сообщения:
    911
    Симпатии:
    562
    а для форума типо EXBB где базы данных нет...
    например для WordPress еcть плагин wp-db-backup, а для EXBB?
     
  6. whitelex

    whitelex Постоялец

    Регистр.:
    5 апр 2008
    Сообщения:
    58
    Симпатии:
    3
    Обоснуйте, пожалуйста :)

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

    porsche2

    Регистр.:
    18 ноя 2007
    Сообщения:
    667
    Симпатии:
    210
    делать backup умеет любая панель управления, удаление старых архивов тоже задумано в панели. В Google вариантов немеряно, запрос типа .sh бекап выдал


    http://people.az/forum/index.php?showtopic=2268

    http://masterhost.ru/support/faq/technical/backup-at-unix/

    на PHP http://www.serversidemagazine.com/php/backup-your-svn-repository-with-php


    Удалять старые файлы можно так, в файл 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 на том же сервере, плохая затея
     
    whitelex нравится это.
Статус темы:
Закрыта.