[原创]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

