如果你的空间是linux系统,空间比较大的话,拥有SSH权限,那么恭喜你,你可以用这段脚本来实现自动备份整个wp到空间上或者Dropbox上了。
脚本doBackWebSite.sh利用linux的crontab功能实现自动定时备份功能,并自动删除过期的备份文件,节约空间,程序默认为删除备份前三天的脚本,当然你可以在脚本中自动制定的;-) ,下面介绍脚本使用过程。
1. 脚本内容如下
#!/bin/bash
#*********************************************************#
# File : doBackWebSite.sh #
# Perpose: 自动备份并删除指定天数的前的备份文件 #
# Atuthor: 吴泽君 #
# WebSite: www.fly3q.com #
# Date : 2010-06-25 #
# Modify : 2010-06-29 增加Dropbox备份支持 #
#*********************************************************#
#*********************************************************#
# Local Variable #
#*********************************************************#
#空间的更目录
HOME_DIR="~"
#网站内容放置的文件
WS_DIR="fly3q.com"
#放置备份的文件夹
BK_DIR="back"
#Dropbox放置备份的文件夹
Dropbox_BK_DIR="Dropbox/WPBack"
#Dropbox安装目录
Dropbox_BK_DIR=".dropbox-dist"
#网站备份名字
BACK_FILE_NAME=$WS_DIR`date +%Y%m%d`".tgz"
#*********************************************************#
# function : auto_back_files #
# Input : $1 is_back_to_dropbox - 是否备份到dropbox #
# - true/false #
#*********************************************************#
function auto_back_files()
{
cd ~
if [ ! -d $BK_DIR ];then
mkdir -p $BK_DIR
fi
cd $WS_DIR
tar -czf $BACK_FILE_NAME *
mv $BACK_FILE_NAME ../$BK_DIR
echo "[OK] BACK UP $BACK_FILE_NAME"
if [ -n $1 -a "$1" = "true" ];then
move_back_to_dropbox
fi
}
#*********************************************************#
# function : move_back_to_dropbox #
# Input : 将网站备份到Dropbox #
#*********************************************************#
function move_back_to_dropbox()
{
if [ -z ` ps aux|awk -F" " '{print $11}'|grep '^/home/[^]*[dropbox]'` ];then
cd ~/$BK_DIR/$Dropbox_BK_DIR
dropboxd &
fi
if [ -d Dropbox ];then
cd Dropbox
if [ ! -d WPBack ];then
mkdir WPBack
fi
cd ~/$Dropbox_BK_DIR
cp ~/$BK_DIR/$BACK_FILE_NAME .
echo "[OK] $BACK_FILE_NAME had benn back to Dropbox."
else
echo "[FAIL] You had not installed Dropbox,please first install Dropbox."
fi
}
#*********************************************************#
# function : auto_delete_last_back_files #
# Input : $1 offset_day - 自动删除指定前几天的备份文件 #
# - 默认删除前3天的备份文件 #
#*********************************************************#
function auto_delete_last_back_files()
{
local year=`date '+%Y'`
local month_of_year=`date '+%m'|sed s/^0//`
local day_of_month=`date '+%d'|sed s/^0//`
local offest=3
local index=1
local month=(0)
local day=(0)
while [ $index -le 12 ];
do
month[$index]="$index"
let index+=1
done
index=1
while [ $index -le 31 ];
do
day[$index]=$index
let index+=1
done
if [ -n "$1" ];then
offest=$1
fi
ret_day=
let ret_day=$day_of_month-$offest
if [ $ret_day -le 9 ];then
if [ $ret_day -le 0 ];then
let ret_month=$month_of_year-$ret_day/31-1
if [ $ret_month -le 9 ];then
ret_month="0"$ret_month
fi
let index=31+$ret_day%31
ret_day=${day[$index]}
if [ $ret_day -le 9 ];then
ret_day="0"$ret_day
fi
else
ret_day="0"$ret_day
fi
fi
if [ -n "$ret_month" ];then
ret_month=`echo $ret_month|sed s/^0//`
ret_month="0"$ret_month
else
ret_month="0"$month_of_year
fi
ret_year=$year
ret_date=$ret_year$ret_month$ret_day
ret_bck_file_name=$WS_DIR$ret_date".tgz"
cd ~
cd $BK_DIR
if [ -f $ret_bck_file_name ];then
#rm -fr $ret_bck_file_name
echo "[OK] DELETE $ret_bck_file_name"
else
echo "[FAIL] $ret_bck_file_name NOT EXIST!!"
fi
cd ~
if [ -d $Dropbox_BK_DIR ];then
cd $Dropbox_BK_DIR
if [ -f $ret_bck_file_name ];then
#rm -fr $ret_bck_file_name
echo "[OK] DELETE Dropbox BackFile->$ret_bck_file_name."
else
echo "[FAIL] Dropbox BackFile->$ret_bck_file_name NOT EXIST."
fi
fi
}
auto_back_files true
auto_delete_last_back_files
2. SSH 登陆空间
建一个目录back的目录,放这个脚本到这个back目录里面。
3. 配置crontab
输入crontab -e,来配置linux自动运行的情况,具体的参数配置可以参考本博另外一篇关于crontab文章。
例如我的配置如下:
22 22 * * 1-7 cd /home/user1/back/;bash doBackWebSite.sh
表示每天22:22分执行doBackWebSite.sh脚本完成自动备份的功能。
4. 安装Dropbox
Dropbox是一个能够在线存储文件并提供版本版本的管理的云存储服务。具体请参考http://wiki.dropbox.com。
安装步骤参考http://wiki.dropbox.com/TipsAndTricks/TextBasedLinuxInstall$ cd ~
$ cd wget -O dropbox.tar.gz http://www.dropbox.com/download/?plat=lnx.x86$ tar -zxof dropbox.tar.gz
$ mv .dropbox-dist ~
$ cd ~
$ ~/.dropbox-dist/dropboxd &
此时会提示一串URL,要求你在浏览器里面输入这串URL将这台虚拟主机连到Dropbox上,登陆之后你就可以看到提示这台机子已经连到了dropbox上了。
注:这边第一次需要这样配置,以后系统会保存登陆状态就不需要去手动输入URL了,这也是这个脚本能够实现自动备份到上面的关键。通过ps aux|grep dropbox查看dropbox是否已经运行起来了,有的话恭喜你dropbox配置成功了。
5. 完成配置
第一次请手动运行doBackWebSite.sh,已完成链接虚拟主机到dropbox。
这样每天就会自动地把你的网站进行备份了,通过ls -oh 你可以查看备份的情况。同时如果配置了接收邮箱的话,系统crontab也会自动的发出一封执行结果的邮件Cron cd /home/user1/back/;bash doBackWebSite.sh
[OK] BACK UP fly3q.com20100629.tgz[OK] fly3q.com20100629.tgz had benn back to Dropbox.
[OK] DELETE fly3q.com20100626.tgz
[FAIL] Dropbox BackFile->fly3q.com20100626.tgz NOT EXIST.
这边我还没有备份fly3q.com20100626.tgz到dropbox上所以失败了,嘿嘿。
同时查看dropbox的Event里面可以看到
6. 总结
这个脚本完全是属于硬性的打包备份,备份文件还是放在空间里面,也可能说还是不安全,那么当然你可以在你的机子上来完成自动备份远程的主机文件,然后ftp下到本地来,这样就不用担心空间出现问题不能及时恢复了。这个实现也很简单的,你的机子执行自动运行备份,自动登陆ssh,一切都搞定,如果有需要的话,我可以分享出来。
但是考考虑到我们网速的问题,这个想法也就放弃了,但是我想到一个更好的办法,放到微软25G的skydrive上去,但是它不提供相应的api的呀,只是有一个非官方的.netapi,要是有更简单的jsapi就好了,如果大家有什么好的点子欢迎讨论。现在受到月光博客一篇文章的启发,我把备份放到了dropbox上,呵呵,也算是实现了云存储吧。随便提下国外的主机上传到dropbox速度就是快的呀,我打包文件60M基本上就是一分钟左右,就搞定了,羡慕这样的网速。

- Pingback on 2010/07/08/ 22:09

@anyLiv
呵呵,谢谢支持,下一步准备把数据库的备份也增加进去,觉得好用,就拿去用,嘿嘿。
霸道!!
灰常好!感谢分享!!
谢谢支持,呵呵。
@奶牛
这个脚本只是实现了一个原始的打包自动备份删除的功能,东西还是放在了空间上了,省去了手动备份的吧。
看自己的习惯了。
你的ubutun文章写的不错,前几天编译ubutun的内核,始终是没有加载成功,编译高于自身内核的版本的可以起来,但是低于现在内核的切总是起不来,报了一大堆的错,你之前遇到过没有呢?
wp备份奶牛感觉还是手工方便一些~~~
@灵亦rEd
呵呵,谢谢支持。
不错不错,我一般都是手动的