我的QQ信箱容量16G,據說容量是不限的,會自動增加,如果用來備份vps上的網站,不佔空間又方便,那豈不是很爽!有辦法了,打包後用sendmail發送到QQ郵箱,簡單又快速。
我比較熟悉php,用PHPMailer-Lite來呼叫sendmail傳送備份檔。你不能用sendmail的話可以使用smtp發送,但比較慢一點。
要是大站附件按天來存的話,也可以用這個方法來按天打包備份附件,反正QQ郵件是無限容量的,不用白不用。
以下為引用的內容:
<?php
/**
* 部落格備份並傳送到郵箱
* 很方便很適合小站備份的方式
*
* useage:
* /usr/local/php/bin/php /path/to/mailbackup.php
*
* @author 潘春孟<cmpan(at)qq.com>
* @link <a href=" http://yulans.cn/php/mail-backup">yulans.cn</a >
* @license NEWBSD
*/
//require_once('class.phpmailer-lite.php');
require_once('PHPMailerLite.php');
// 設定
$mailTo = '[email protected]' ; // 傳送到哪個郵箱
$mailFrom = '[email protected]' ; // 傳送附件信箱名
$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('Ymd 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('Ymd H:i:s').'!';
$mail->MsgHTML(date('Ymd 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 Finishn";
上面的檔案內容全部上傳到伺服器以後,在/etc/cron.daily/新建一個檔案讓系統按天運行備份腳步,內容為:
#!/bin/sh
/webserver/php/bin/php /path/to/worker.php #上面的php腳步的路徑