建站经验 experience
当前位置:首页 > 网站建设专题 > 建站经验
vps小站最佳备份方案:邮件备份
发布日期:2011-01-11 阅读次数:921 字体大小:

我的QQ邮箱容量16G,据说容量是不限的,会自动增加,如果用来备份vps上的网站,不占空间又方便,那岂不是很爽!有办法了,打包后用sendmail发送到QQ邮箱,简单快捷。

我比较熟悉php,用PHPMailer-Lite来调用sendmail发送备份文件。你不能用sendmail的话可以使用smtp发送,不过比较慢一点。

要是大站附件按天来存的话,也可以用这个方法来按天打包备份附件,反正QQ邮件是无限容量的,不用白不用。

需要下载 http://nchc.dl.sourceforge.net/project/phpmailer/phpmailer%20for%20php5_6/PHPMailer-Lite%20v5.1/PHPMailer-Lite_v5.1.zip

以下为引用的内容:

<?php
/**
 * 博客备份并发送到邮箱
 * 很方便很适合小站备份的方式
 *
 * useage:
 *   /usr/local/php/bin/php /path/to/mailbackup.php
 *
 * @author   潘春孟 <cmpan(at)qq.com>
 * @link     <a href=http://www.chinaz.com/Webbiz/Exp/"http://yulans.cn/php/mail-backup">yulans.cn</a>
 * @license  NEWBSD
 */

//require_once('class.phpmailer-lite.php');
require_once('PHPMailerLite.php');

// 设置
$mailTo      = 'myemail@qq.com'; // 发送到哪个邮箱
$mailFrom    = 'bak@yulans.cn';  // 发送附件邮箱名
$dataDir     = '/data/mysql/3306/data/yulans/';  // 网站的MySQL数据库路径
$attDir      = '/web/yulans.cn/www/wp-content/uploads/';  // 附件路径
$dataBakFile = 'uploads.yulans.cn.gz';
$attBakFile  = 'data.yulans.cn.gz';

date_default_timezone_set('Asia/Shanghai'); // PHP 5 >= 5.2.0

$gzPre = date('Ymd-His-');

print "Backup Message:\n";
print "backup start:".date('Y-m-d H:i:s')."\n";

// 打包附件
$attGz  = "/tmp/{$gzPre}{$attBakFile}"; // 待发送附件压缩包
system("tar zcf $attGz $attDir");

print "$attGz finish!\n";

// 复制数据库文件出来进行打包
$dbGz   = "/tmp/{$gzPre}{$dataBakFile}"; // 待发送附件数据库压缩包
$dbTmp  = "/tmp/{$gzPre}db_bak_tmp";
system("\cp -R $dataDir $dbTmp");
system("tar zcf $dbGz $dbTmp");

print "$dbGz finish!\n";

$mail = new PHPMailerLite(true);
$mail->IsSendmail();

try {
    $msg = '';
    $mail->SetFrom($mailFrom, 'Bak');
    $mail->AddAddress($mailTo, 'cm pan');
    $mail->Subject = 'Yulans.cn backup';
    $mail->AltBody = date('Y-m-d H:i:s').'!';
    $mail->MsgHTML(date('Y-m-d H:i:s').'! OK');

    // 添加附件
    if(file_exists($attGz)) {
        $mail->AddAttachment($attGz);
        $msg .= "AddAttachment $attGz finish!<br />\n";
    } else {
        $msg .= "Attachment $attGz not exists!<br />\n";
    }
    if(file_exists($dbGz)) {
        $mail->AddAttachment($dbGz);
        $msg .= "AddAttachment $dbGz finish!<br />\n";
    } else {
        $msg .= "Attachment $dbGz not exists!<br />\n";
    }

    print $msg;

    $mail->MsgHTML($msg);
    $mail->Send();
} catch (phpmailerException $e) {
    echo $e->errorMessage();
} catch (Exception $e) {
    echo $e->getMessage();
}

// 删除临时文件
system("rm -f $attGz");
system("rm -f $dbGz");
system("rm -rf $dbTmp");

print "Backup Finish\n";

上面的文件内容全部上传到服务器以后,在/etc/cron.daily/新建一个文件让系统按天运行备份脚步,内容为:

#!/bin/sh
/webserver/php/bin/php /path/to/worker.php #上面的php脚步的路径

附件:php备份脚本下载:mail-backup

【相关备份方法】

VPS折腾笔记之VPS备份

自动备份文件并发送到Gmail (适用G级数据的备份)

文章来源:http://yulans.cn/php/mail-backup