emlog 的一键备份
对于一个托管在 LAMP 虚拟主机(不是 vps)环境下的 emlog 博客,不知道大家平时备份是不是和我一样这么操作的:
- 登陆到后台,备份数据库(当然,或者是用插件定期备份发送到邮箱)
- 用 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