对于一个托管在 LAMP 虚拟主机(不是 vps)环境下的 emlog 博客,不知道大家平时备份是不是和我一样这么操作的:

  1. 登陆到后台,备份数据库(当然,或者是用插件定期备份发送到邮箱)
  2. 用 ftp 备份 content 目录

如果你想简化操作,下面的脚本也许可以帮到你。脚本很丑陋,能完成功能即可。

1. linux

(1)将下面脚本中 config 标记部分需要自己配置,意义如下:

  • backup_path:content 目录和 sql 文件要存放的目录
  • emlog_domain:你的博客域名,例如:http://www.pureage.info
  • emlog_user:你博客的登录名
  • emlog_password:你博客的登陆密码
  • remotecontent:你 ftp 上 content 目录的完整 url,带上你的 ftp 账号和密码信息,例如: ftp://admin:password@127.0.0.1/domains/xxxx.com/public_html/content 将admin、password改成你自己的 ftp 账号、密码,把 127.0.0.1 改成你 ftp 的 IP(通常就是主机 IP),domains/xxxx.com/public_html/contentg 改成你自己的 content 在 ftp 上的目录即可。

(2)假设将该脚本命名为 emlog_backup.sh,执行 chmod +x emlog_backup.sh,赋予可执行属性。

(3)执行./emlog_backup.sh:

  • 如果不带参数,或执行 ./emlog_backup.sh all 则先备份数据库,再备份 content 目录
  • 如果是执行 ./emlog_backup.sh sql,则只备份数据库
  • 如果是执行 ./emlog_backup.sh content,则只备份 content 目录
#!/bin/bash  
  
#-----config------------  
backup_path="/home/strider/blog/backup"  
emlog_domain="http://www.pureage.info"  
emlog_user="aaaaa"  
emlog_password=123456  
remote_content="ftp://admin:123456@127.0.0.1/domains/pureage.info/public_html/content"  
#----------------------  
  
  
#-----  
mkdir -p "$backup_path"  
  
if [ -d "$backup_path/content" ];then  
mv "$backup_path/content" "$backup_path/content_old"  
fi  
  
  
  
backup_database()  
{  
        #----get the cookie----  
        curl -d "user=$emlog_user&pw=$emlog_password"  "$emlog_domain"/admin/index.php?action=login -c "$backup_path/cookie"  
  
  
        #----back up database----  
        table_backup=(  
        "emlog_attachment"  
        "emlog_blog"  
        "emlog_comment"  
        "emlog_options"  
        "emlog_navi"  
        "emlog_reply"  
        "emlog_sort"  
        "emlog_link"  
        "emlog_tag"  
        "emlog_trackback"  
        "emlog_twitter"  
        "emlog_user"  
        )  
        table_box=$(  
        let i=0;  
        for((i=0;i<${#table_backup[@]}-1;i=i+1))  
        do  
        echo -n "table_box[$i]=${table_backup[$i]}&"  
        done  
        echo -n "table_box[$i]=${table_backup[$i]}"  
        )  
        echo $table_box  
  
        sql_file="$(date "+%Y_%m_%d_%H_%M_%S").sql"  
  
        curl  -b "$backup_path/cookie" -L    -d "$table_box"  "$emlog_domain"/admin/data.php?action=bakstart>"$backup_path/$sql_file"  
  
        #----delete the cookie----  
        rm -rf "$backup_path/cookie"  
}  
  
backup_content()  
{  
        wget  -r  -nH --cut-dirs=3  -nv "$remote_content" -P "$backup_path"  
  
        #----delete old content  
        if  [ -d "$backup__path/content" ];then  
                rm -rf "$backup_path/content"  
        fi  
}  
  
  
if [ $# -eq 0 ];then  
        backup_database  
        backup_content  
        exit 0  
  
elif [ $# -eq 1 ];then  
        if [ "$1" == "all" ];then  
                backup_database  
                backup_content  
                exit 0  
  
        elif [ "$1" == "sql" ];then  
                backup_database  
                exit 0  
  
        elif [ "$1" == "content" ];then  
                backup_content  
                exit 0  
        else  
                echo "operation not supported!"  
                exit 1  
        fi  
  
else  
        echo "operation not supported!"  
        exit 1  
fi  

2. windows

由于对 bat 不熟,所以没有写成上面那种比较详细的脚本。但其实上面真正有用的只有三句:两个 curl 语句和一个 wget 语句。而 curl 和 wget 都有 windows 版本的。也很好写,最简单的例子,把下面的内容复制到一个文本里,将其改名为 emlog_backup.bat,也可以工作:

curl -d "user=xxxx&pw=123456"  http://www.pureage.info/admin/index.php?action=login -c cookie  
  
curl  -b cookie -L -d "table_box[0]=emlog_attachment&table_box[1]=emlog_blog&table_box[2]=emlog_comment&table_box[3]=emlog_options&table_box[4]=emlog_navi&table_box[5]=emlog_reply&table_box[6]=emlog_sort&table_box[7]=emlog_link&table_box[8]=emlog_tag&table_box[9]=emlog_trackback&table_box[10]=emlog_twitter&table_box[11]=emlog_user"  www.pureage.info/admin/data.php?action=bakstart>myemlog.sql  
  
wget  -r  -nH --cut-dirs=3 -nv  ftp://admin:123456@127.0.0.1/domains/pureage.info/public_html/content