[原创]linux环境下中小型网站备份网站源码数据和mysql数据库脚本

1,网站源码备份脚本webbakup.sh

#!/bin/bash
# bakup website for 21yunwei
#author swh
time=`date +%Y%m%d`
[ ! -e /home/bakup/websitebak ] && mkdir -p /home/bakup/websitebak
cd /home/wwwroot/21yunwei/
tar zcf /home/bakup/websitebak/21yunwei$time.tar.gz ./*

说明:该脚本可以继续优化,当前只是备份一个站点。如果服务器上网站比较多,可以将站点名设置变量后分别以站点名+时间.tar.gz 方式备份,如下面脚本所示。另外如网站较大请根据实际情况设置备份策略,避免IO过高影响正常使用。这里不做过多说明,可以自己补充脚本。
站点目录下如有多个站点,可以参考这个脚本:

#!/bin/bash
# bakup website for all
#author:21yunwei

time=`date +%Y%m%d`
 [ ! -e /backup/wwwrootbak/$time  ] && mkdir -p /backup/wwwrootbak/$time
ls -l   /home/wwwroot | grep  -v test|  awk 'NR!=1{ print  $NF }' > sitename.txt
cat sitename.txt | while  read sitename
do
cd /home/wwwroot/$sitename
tar zcf  /backup/wwwrootbak/$time/$sitename.tar.gz   *
done
find  /backup/wwwrootbak/ -type d  -mtime +15  |xargs rm -rf

2,mysql备份脚本mysqlbakup.sh 。

#!/bin/bash
# backup mysql for 21yunwei
#author swh
[ ! -e /home/bakup/mysqlbak ] && mkdir -p /home/bakup/mysqlbak
time=`date +%Y%m%d`
mysqldump -uDBUsername -pDBPasswd DBname --skip-lock-tables >  /home/bakup/mysql/21yunwei$time.sql

说明:这里只是备份了一个数据库,如果是备份多个数据库请自行设置变量$databasename分别导出。 另外该脚本只适合一些小型网站,数据库较大的导出不适合,请设置自己单独的数据库备份策略。下边单独测试了脚本可以尝试如下两个方法(一个while循环一个for循环)分别导出备份并将sql文件以数据库名+日期.sql方式命名:

#!/bin/bash
# dump mysql  for all
#author  swh

[ ! -e /home/bakup/mysqlbak ]  &&  mkdir -p /home/bakup/mysqlbak
time=`date +%Y%m%d`
mysqlshow  -uroot  -pxxxxxx |  grep  -Ev "Data|info" | grep  -v + | awk '{print  $2}' > databasename.txt
while read sqlname
do
mysqldump  -uroot  -pxxxxxx  $databasename  --skip-lock-tables >  /home/bakup/mysqlbak/$databasename.$time.sql
done < databasename.txt
find  /home/bakup/mysqlbak/ -type f  -mtime +30  |xargs rm -rf  #超过30天的删除。
#!/bin/bash 
#bak mysql all
#date:2016.1.14
#auth:21yunwei
TIME=`date +%Y%m%d_%H%M%S`
LOGFILE="/data/mysqlbak/mysql_full_bak_time.log"
MYSQL_BAKDIR="/data/mysqlbak/full$TIME"
USER=root
PASSWORD=xxxxxx
[ ! -d $MYSQL_BAKDIR  ] &&  mkdir -p $MYSQL_BAKDIR
[ ! -e  $LOGFILE ] && touch  $LOGFILE
DATABASE=`mysqlshow  -u$USER  -p$PASSWORD  |  grep  -Ev "Data|info|per|sys|zabbix" | grep  -v + | awk '{print  $2}'`
for bakmysqlname in $DATABASE
do
/usr/bin/mysqldump  -u$USER  -p$PASSWORD  $bakmysqlname  --skip-lock-tables > $MYSQL_BAKDIR/$TIME_$bakmysqlname.sql
tar zcf $MYSQL_BAKDIR/$TIME_$bakmysqlname.tar.gz   $MYSQL_BAKDIR/$TIME_$bakmysqlname.sql --remove-files &> /dev/null
done
ret=$?
FINISHTIME=`date +%Y%m%d_%H%M%S`

[ $ret -eq 0 ] && echo  "Mysql fullbakup  finished, time: $FINISHTIME">>  $LOGFILE || echo "Mysql fullbakup failed,please check time:$FINISHTIME" >>  $LOGFILE
find  /data/mysqlbak/ -type d  -mtime +30  |xargs rm -rf  #超过30天的删除。

3,设置任务计划crontab -e,指定每周三的凌晨一点备份数据库,三点进行网站备份。具体备份频率请根据自己实际情况来定,同时要设置清理备份数据,防止磁盘爆掉。

0 1 * * 3  sh /home/shell/mysqlbackup.sh
0 3 * * 3  sh /home/shell/webbakup.sh
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » [原创]linux环境下中小型网站备份网站源码数据和mysql数据库脚本