首页 » 工作 » 正文

CentOS 下自动备份WordPress的Shell脚本

发布者:站点默认
2012/01/4 浏览数(3,741) 分类:工作 评论(2)

更新:

[2012-01-13] 增加排除文件功能,可以排除ttc、mp3、rmvb等不需要备份的文件。

[2013-10-14] 增加分卷功能,大包分批发送。见 //blog.upall.cn/1411.html

说明:

一个备份wordpress的bash shell脚本,备份成功后会发送到代码中指定的邮箱。备份内容包括wordpress需要备份的文件(可定制文件列表)及相应的数据库(需要自己修改代码中相应部分)。

本人钟爱7-zip,所以这个脚本也使用了她,如果不喜欢请自己修改代应的代码,本人有偿提供定制。^_^

脚本需要一个备份文件列表,代码尾部会附上示例,请根据自己的情况修改。

执行成功的话什么也不输出,出错的话会有相应的提示。

效果预览:

linux下自动备份脚本发来的邮件

linux下自动备份脚本发来的邮件

第一封邮件及其它格式相同的邮件为旧的博客服务器发过来的,旧服务器为2003,旧服务器虽然废弃但扔在运行中。文末提供有其上的备份脚本。

代码:

#####################################
# 说明:WP备份脚本                  #
# 要求:安装7zip                    #
# 作者:upall,/ #
#####################################
#!/bin/bash

# 配置
FILE_LIST="/home/upall/www/sh/bakfile.list"    # 需要备份的文件列表
FILE_LIST_EX="/home/upall/www/sh/bakfileEx.list"    # 需要排除的文件列表
MAIL_TO="root@upall.cn"    # 收件人
DIR_WP="/home/upall/www/blog.upall.cn"    # WP根目录
DB_NAME="staff_cn_upall"    # DB名称
DB_HOST="localhost"    # mysql服务器地址
DB_PORT="3306"    # DB端口号
DB_USER="staff_cn_upall"    # DB用户名
DB_PWD="tUZqHbvt7SMTUuWY"    # DB密码
DIR_TEMP="/var/tmp"    # 临时目录
MAIL_TITLE="[blog.upall.cn]备份"    # 邮件标题
FILE_PWD="upall"    # 压缩包密码
DIR_CUR=$PWD    # 记录当前目录,SHELL需要切换目录
DATE=`date +%Y%m%d%H%M%S`
MSG_CONTENT=""

# 创建临时目录
if [ -z "$MSG_CONTENT" ]; then
	if [ ! -d $DIR_TEMP ]; then
		mkdir -p "$TEMP_DIR"
		if (( $? != 0 )); then
			MSG_CONTENT='CAN NOT MKDIR TEMP';
		fi
	fi
fi

# 测试WP目录
if [ -z "$MSG_CONTENT" ]; then
	if [ ! -d $DIR_WP ]; then
		MSG_CONTENT='WP FOLDER NOT FOUND';
	fi
fi

# 检测待备份文件列表是否存在
if [ -z "$MSG_CONTENT" ]; then
	if [ ! -e $FILE_LIST ]; then
		MSG_CONTENT='LIST FILE NOT FOUND';
	fi
fi

# 检测数据库帐号
# ----暂无----

# 备份数据库
if [ -z "$MSG_CONTENT" ]; then
	mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PWD $DB_NAME > $DIR_TEMP/DB$DATE.sql
	if (( $? != 0 )); then
		MSG_CONTENT='DUMP ERROR';
	fi
fi

# 备份WP文件
if [ -z "$MSG_CONTENT" ]; then
	cd $DIR_WP
	#7za a -p$FILE_PWD -xr!*.ttc $DIR_TEMP/SITE$DATE.7z @$FILE_LIST > /dev/null
	7za a -p$FILE_PWD -xr@$FILE_LIST_EX $DIR_TEMP/SITE$DATE.7z @$FILE_LIST > /dev/null
	if (( $? != 0 )); then
		MSG_CONTENT='CAN NOT TO COMPRESS THE WP FOLDER';
	fi
fi

# 追加DB到备份文件
if [ -z "$MSG_CONTENT" ]; then
	7za a -p$FILE_PWD $DIR_TEMP/SITE$DATE.7z $DIR_TEMP/DB$DATE.sql > /dev/null
	if (( $? != 0 )); then
		MSG_CONTENT='CAN NOT APPEND DB TO PACKAGE';
	fi
fi

# 发送邮件
if [ -z "$MSG_CONTENT" ]; then
	echo "" | mutt -s "[SUCCESS]$MAIL_TITLE" -a $DIR_TEMP/SITE$DATE.7z $MAIL_TO
else
	echo $MSG_CONTENT | mutt -s "[ERROR]$MAIL_TITLE" $MAIL_TO
fi

# 清理退出
rm -f $DIR_TEMP/DB$DATE.sql
rm -f $DIR_TEMP/SITE$DATE.7z
cd $DIR_CUR
if [ -z "$MSG_CONTENT" ]; then
	exit 0
else
	echo "$MSG_CONTENT"
	exit 1
fi

备份文件列表示例(bakfile.list):

.htaccess
wp-config.php
wp-content/*
wp-includes/images/smilies/*

排除文件列表示例(bakfileEx.list):

*.ttc
*.exe
*.mp3

补充:

一、如何定时自动执行备份操作。

如果需要定时执行请以关健字“linux crontab”在www上搜索。^_^

crontab 用法举例:

# 每天凌晨4点执行
00 04 * * * /home/upall/sh/wp.sh > /dev/null 2>&1

记得在结尾添加“> /dev/null 2>&1”,不然会在“/var/spool/mqueue/ ”中生成N个G的文件。

如果服务器空间满了话,可以用命令“du -h –max-depth=1 [目录]”查找[目录]文件夹中最大的文件,再在最大的那个文件夹里找它下边最大的文件夹,直到找到目标:

[root@cent ~]# du -h --max-depth=1 /
145M    /lib
0       /proc
880K    /opt
661M    /var <-- 这个最大,接着找这个
16M     /boot
3.9G    /
[root@cent ~]# du -h --max-depth=1 /var/
7.0M    /var/spool
8.0K    /var/games
80M     /var/log <-- 接着在这个里边找
16K     /var/ftp
661M    /var/
[root@cent ~]# du -h --max-depth=1 /var/log/

二、Win版的自动备份脚本。

元旦后博客从海外windows 2003服务器转入国内linux服务器。这里附上以前在win机上使用的脚本供需要的朋友们修改后使用。功能同上文所述相同,详情见附件。linux下定时执行脚本可以使用命令crontab,windows下也有一个类似的命令为:at。

at用法示例:

at 23:00 /every:一,二,三,四,五,六,日 D:\Tools\AutoBak\wp.bat

点击下载

<完>

Thanks to AutoBakUpall.bat

Thanks to AutoBakUpall.bat

点击返回顶部
  1. 留言
  2. 联系方式