╃苍狼山庄╃╃苍狼山庄╃

Clang出品,
必属精品!

Linux/VPS下定时备份网站和MySQL数据库-crontab定时任务计划

一、自动备份脚本:

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#你要修改的地方从这里开始
MYSQL_USER="mysql_username"                 #mysql用户名
MYSQL_PASS="mysql_password"                 #mysql密码
MAIL_TO="your@mail.com"                     #数据库发送到的邮箱
MAIL_subject="XXX MySQL BackUp"             #邮件主题
FTP_HOST="ftp.domain.com"                   #ftp地址
FTP_USER="ftp_username"                     #ftp用户名
FTP_PASS="ftp_password"                     #ftp密码
FTP_backup="/"                              #ftp上存放备份文件的目录,这个要自己得ftp上面建的
WEB_DATA="/home/wwwroot"                    #要备份的网站数据
# Set Server-Configure file to back up
CONF_NGINX="/usr/local/nginx/conf"          # Nginx配置文件目录,可以为空
CONF_APACHE=""                              # Apache配置文件目录,可以为空
CONF_PHP="/usr/local/php/etc"               # PHP配置文件目录,可以为空
FILE="/root/cut_nginx_logs.sh /root/lnmp /root/vhost.sh"    # 自定义备份文件,可以为空
TEMP_PATH="/root/www_backup"                # 备份文件存放目录
ServerName="BuyVM"                          # 备份标识
#你要修改的地方从这里结束


#定义数据库的名字,本地3天前的名字,FTP服务器上5天前的名字
BakName=$(date +%Y%m%d)_${ServerName}_backup.tar.gz
LocalName=$(date -d -3day +"%Y%m%d")_${ServerName}_backup.tar.gz
OldName=$(date -d -5day +"%Y%m%d")_${ServerName}_backup.tar.gz


#删除本地3天前的数据
echo "Delete three days before the backup..."
rm -rf ${TEMP_PATH}/${LocalName}
rm -rf ${TEMP_PATH}/conf ${TEMP_PATH}/mysql ${TEMP_PATH}/wwwroot ${TEMP_PATH}/files
echo "Delete three days before the backup OK!!!"

#备份数据库
if [ -n "$MYSQL_USER" ] && [ -n "$MYSQL_PASS" ] && [ -n "$MAIL_TO" ]; then
	echo "Backup Mysql DB..."
	mkdir -p ${TEMP_PATH}/mysql
	cd ${TEMP_PATH}/mysql
	#导出数据库,一个数据库一个压缩文件
	for db in `mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
		(mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} --skip-lock-tables | gzip -9 - > ${db}.sql.gz)
	done
	#压缩数据库文件为一个文件
	cd ${TEMP_PATH}/mysql
	echo "Compress Mysql DB..." && tar zcf $(date +"%Y%m%d")_${ServerName}_db.tar.gz *.sql.gz
	rm -rf ${TEMP_PATH}/mysql/*.sql.gz
	#发送数据库到Email,如果数据库压缩后太大,请注释这行
	#echo "主题:数据库备份" | mutt -a ${TEMP_PATH}/$DataBakName -s "内容:数据库备份" $MAIL_TO
	echo "Send Mysql DB to Mail..."
	echo "" | mail -s "${MAIL_subject}" -a ${TEMP_PATH}/mysql/$(date +"%Y%m%d")_${ServerName}_db.tar.gz $MAIL_TO
	echo "Backup Mysql DB OK!!!"
fi

#备份网站数据
if [ -n "$WEB_DATA" ]; then
	echo "Copy wwwroot..."
	mkdir -p ${TEMP_PATH}/wwwroot
	cp -rf ${WEB_DATA}/* ${TEMP_PATH}/wwwroot
	echo "Copy wwwroot OK!!!"
fi

#备份服务器配置
if [ -n "$CONF_NGINX" ]; then
	echo "Copy nginx-conf files..."
	mkdir -p ${TEMP_PATH}/conf/nginx
	cp -rf ${CONF_NGINX}/* ${TEMP_PATH}/conf/nginx
	echo "Copy nginx-conf files OK!!!"
fi
if [ -n "$CONF_APACHE" ]; then
    echo "Copy apache-conf files..."
	mkdir -p ${TEMP_PATH}/conf/apache
    cp -rf ${CONF_APACHE}/* ${TEMP_PATH}/conf/apache
    echo "Copy apache-conf files OK!!!"
fi
if [ -n "$CONF_PHP" ]; then
    echo "Copy php-conf files..."
	mkdir -p ${TEMP_PATH}/conf/php
    cp -rf ${CONF_PHP}/* ${TEMP_PATH}/conf/php
    echo "Copy php-conf files OK!!!"
fi

#压缩自定义文件
if [ -n "$FILE" ]; then
	echo "Copy custom files..."
	mkdir -p ${TEMP_PATH}/files
	cp -rf ${FILE} ${TEMP_PATH}/files
	echo "Copy custom files OK!!!"
fi

#压缩备份文件
cd ${TEMP_PATH}
echo "Compress backup files..." && tar -zcPf ${TEMP_PATH}/${BakName} conf mysql wwwroot files
if [ -e "$TEMP_PATH/$BakName" ]; then
	rm -rf ${TEMP_PATH}/conf ${TEMP_PATH}/mysql ${TEMP_PATH}/wwwroot ${TEMP_PATH}/files
	echo "Compress backup files OK!!!"
fi

#上传到FTP空间,删除FTP空间5天前的数据
if [ -n "$FTP_HOST" ] && [ -n "$FTP_USER" ] && [ -n "$FTP_PASS" ] && [ -n "$FTP_backup" ]; then
echo "Upload Backup..."
cd ${TEMP_PATH}
ftp -v -n $FTP_HOST << END
user $FTP_USER $FTP_PASS
type binary
passive
cd $FTP_backup
delete $OldName
put $BakName
bye
END
echo "Upload Backup OK!!!"
fi
echo "----------------------------------------"
echo "All Backup OK!!!"
exit 0

保存脚本上传至服务器(如:/root/backup.sh)并给脚本加上可执行属性:

chmod 755 /root/backup.sh


使用命令:

/root/backup.sh

测试执行备份脚本,如果一切正常的话,接着进行下面的步骤,将脚本加入crontab定时任务计划。

二、将脚本加入crontab定时任务计划

1、安装crontab

CentOS下面安装Crontab

#安装Crontab
yum install vixie-cron crontabs
#设为开机自启动
chkconfig crond on
#启动
service crond start

说明:vixie-cron软件包是cron的主程序;crontabs软件包是用来安装、卸装、 或列举用来驱动 cron 守护进程的表格的程序。

Debian下面安装Crontab

#大部分情况下Debian都已安装。
apt-get install cron
#重启Crontab
/etc/init.d/cron restart

2、查看crontab定时执行任务列表

crontab -l

3、添加crontab定时执行任务

crontab -e

如每周一凌晨2点自动执行:

0 2 * * 1 /root/backup.sh

保存退出,也可直接编辑“/var/spool/cron/用户名”文件。

4、crontab 任务命令书写格式

格式: minute hour dayofmonth month dayofweek command
解释: 分钟 小时 日期 月付 命令
范围: 0-59 0~23 1~31 1~12 0~7,0和7都代表周日

在crontab中我们会经常用到* ,   -  /n 这4个符号,好吧还是再画个表格,更清楚些:

符号 解释
*(星号) 代表所有有效的值。 如:0 23 * * * backup 不论几月几日周几的23点整都执行backup命令。
,(逗号) 代表分割开多个值。如:30 9 1,16,20 * * command 每月的1、16、20号9点30分执行command命令。
-(减号) 代表一段时间范围。如0 9-17 * * * checkmail 每天9点到17点的整点执行checkmail命令
/n 代表每隔n长时间。如*/5 * * * * check 每隔5分钟执行一次check命令,与0-59/5一样。

下面举一些例子来加深理解:
每天凌晨3:00执行备份程序:0 3 * * * /root/backup.sh

每周日8点30分执行日志清理程序:30 8 * * 7 /root/clear.sh

每周1周5 0点整执行test程序:0 0 * * 1,5 test

每年的5月12日14点执行wenchuan程序:0 14 12 5 * /root/wenchuan

每晚18点到23点每15分钟重启一次php-fpm:*/15 18-23 * * * /etc/init.d/php-fpm

注:在Debian系统中cron会读/etc/timezone来做为时区,我们需要编辑/etc/timezone,把里面全部删除,然后添加Asia/Harbin,最后重启一下cron即可。

可以直接使用下面命令来执行:

#添加时区
echo 'Asia/Harbin' > /etc/timezone
#重启服务
/etc/init.d/cron restart

三、导入数据库

常用source命令
进入mysql数据库控制台,
如mysql -u root -p
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source /root/dballback.sql

本原创文章未经允许不得转载 | 当前页面:╃苍狼山庄╃ » Linux/VPS下定时备份网站和MySQL数据库-crontab定时任务计划

评论

文章评论已关闭!