CentOS 下自动备份WordPress的Shell脚本
更新:
[2012-01-13] 增加排除文件功能,可以排除ttc、mp3、rmvb等不需要备份的文件。
[2013-10-14] 增加分卷功能,大包分批发送。见 //blog.upall.cn/1411.html。
说明:
一个备份wordpress的bash shell脚本,备份成功后会发送到代码中指定的邮箱。备份内容包括wordpress需要备份的文件(可定制文件列表)及相应的数据库(需要自己修改代码中相应部分)。
本人钟爱7-zip,所以这个脚本也使用了她,如果不喜欢请自己修改代应的代码,本人有偿提供定制。^_^
脚本需要一个备份文件列表,代码尾部会附上示例,请根据自己的情况修改。
执行成功的话什么也不输出,出错的话会有相应的提示。
效果预览:
第一封邮件及其它格式相同的邮件为旧的博客服务器发过来的,旧服务器为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="user@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
<完>