May 08 2007

在免费空间里面搞了个cron定期备份。。。

Category: 技术ssmax @ 17:32:14

因为用的是免费空间,blog的数据经常不稳定,今天一气之下搞了个email备份,尽量简单了。。。perl的base64编码可以用encode-base64代替,万恶的服务器没有uuencode。。。

要注意一下mysqldump、gzip、perl、sendmail的路径问题

还有tempfile是否是mysql可写的

为啥要创建tempfile呢,我测试的时候免费空间限制了内存的使用和/tmp的可写,所以不能用管道来传,如果能用管道就不用写这么复杂了。。。

能用uuencode和管道的情况下,一行就能搞定。。。

最后就是看看后台能不能用cgi偷入去crontab里面玩玩了,一般都可以di。。

如果crontab不能用,就搞成一个cgi,在本机搞个计划任务定期去访问,windows的cron,嘿嘿

ps:其实用php cron和mail的功能很快可以做出来,但是我懒得去研究php了。没学过,改改还行,自己写就不要搞我了。。。。

命令行用sendmail发带附件mail的代码,同时备份数据库


#!/bin/sh
datestr=`date +%Y%m%d`;
tempfile="/ooxx/database_temp";
attachname="ooxx_$datestr.gz";
dbuser="ooxx";
dbpassword="xxoo";
dbhost="localhost";
dbdatabase="ooxx";
mail_to="ooxx@xxoo.com";
mail_from="admin@ooxx.com";

#echo "mysqldump -h$dbhost -u$dbuser -p$dbpassword --default-character-set=utf8 $dbdatabase 2>&1 > $tempfile;"
mysqldump -h$dbhost -u$dbuser -p"$dbpassword" --default-character-set=utf8 $dbdatabase 2>&1 > $tempfile;
gzip -f $tempfile;
/usr/sbin/sendmail -t -f $mail_from <<!EOF!
To: $mail_to
From: $mail_from
Date: `date -R`
Subject: $datestr blog database backup
Content-Type: multipart/mixed; boundary="=====000_Dragon434046520070_====="

 

This is a multi-part message in MIME format.

--=====000_Dragon434046520070_=====
Content-Type: text/plain; charset="gb2312"

This is a blog database backup @ $datestr

--=====000_Dragon434046520070_=====
Content-Type: application/octet-stream; name="$attachname"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="$attachname"

`perl -e 'use MIME::Base64; open(FILE, $ARGV[0]); while (read(FILE, $buf, 60*57)) {print encode_base64($buf);} close(FILE);' $tempfile.gz`

--=====000_Dragon434046520070_=====--

!EOF!