检查打包软件是否安装全:

yum -y install bzip2 tar gzip cronie crontabs

1、备份网站

#!/bin/sh
# File:    /root/backup_shell/backup_web.sh
# Author:  lovelucy,Late Winter
# Version: 1.1.1
 
# Some vars
BIN_DIR="/usr/bin"
BCK_DIR="/backup"     #备份文件存储目录
WEB_local_DIR="/usr/local"     #网站目录
WEB_www_DIR="/www"     #网站目录
WEB_conf_DIR="/etc/httpd /etc/nginx"     #配置文件路径
EXCLUDE_DIR="/www/pan/uploads"     #不备份的文件夹
DATE=`date +%F`
DATE_YEAR=`date +%Y`
DATE_MONTH=`date +%m`
 
# Make Dir
if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH
then
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
else
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
    mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH
fi
 
# Backup
tar -jcvf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/web_local_$DATE.tar.bz2 $WEB_local_DIR --exclude=*.log
tar -jcvf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/web_www_$DATE.tar.bz2 $WEB_www_DIR  --exclude=$EXCLUDE_DIR
tar -jcvf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/web_conf_$DATE.tar.bz2 $WEB_conf_DIR

2、备份数据库

#!/bin/sh
# File:    /root/backup_shell/backup_db.sh
# Author:  lovelucy,Late Winter
# Version: 1.1.1
 
# Database info
DB_USER="root"     #数据库用户名
DB_PASS=""     #数据库密码
DB_NAME="all-databases"     #数据库名
 
# Some vars
BIN_DIR="/usr/bin"
BCK_DIR="/backup"     #备份文件存储目录
DATE=`date +%F`
DATE_YEAR=`date +%Y`
DATE_MONTH=`date +%m`
 
# Make Dir
if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH
then
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
else
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
    mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH
fi
 
# Backup
#$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/$DATE_YEAR/$DATE_MONTH/${DB_NAME}_dump_$DATE.gz
$BIN_DIR/mysqldump --opt -u$DB_USER --all-databases | gzip > $BCK_DIR/$DATE_YEAR/$DATE_MONTH/${DB_NAME}_dump_$DATE.gz

3、备份网站日志

#!/bin/sh
# File:    /root/backup_shell/backup_log.sh
# Author:  lovelucy,Late Winter
# Version: 1.1.1
 
# Some vars
BIN_DIR="/usr/bin"
BCK_DIR="/backup"
LOG_ERROR="/var/log/web-error_log"
LOG_ACCESS="/var/log/web-access_log"
DATE=`date +%F`
DATE_YEAR=`date +%Y`
DATE_MONTH=`date +%m`
 
# Make Dir
if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH
then
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
else
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
    mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH
fi
 
# Backup
tar -jcvf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/log_$DATE.tar.bz2  $LOG_ERROR $LOG_ACCESS
 
# Clear logs
echo > $LOG_ERROR
echo > $LOG_ACCESS

4、设置cron定时执行

crontab -e

此时会启动默认编辑器vim,添加以下内容

# backup log *daily*
59 3 * * * /root/backup_shell/backup_log.sh
# backup database *weekly*
1 4 * * 5 /root/backup_shell/backup_db.sh
# backup web files *monthly*
5 4 1 * * /root/backup_shell/backup_web.sh

保存后,默认会在/var/spool/cron目录下生成一个以当前用户名命名的文件。以上内容意义为:每一行由空格分割为6部分,依次为“分钟”、“小时”、“日”、“月”、“星期”、“要执行的程序”。故上面的设置是

每天3点59分执行backup_log.sh脚本
每个星期5的4点1分执行backup_db.sh脚本
每个月1号的4点5分执行backup_web.sh脚本
备份操作可能消耗大量资源和时间,应该设置在凌晨访问量小、系统负载低的时候运行。如果有独立的服务器存储备份文件,还可以在脚本中增加ftp或者其它方法传送备份文件到远程服务器的功能。