【linux命令】[原创]linux环境下中小型网站备份网站源码数据和mysql数据库脚本
内容摘要
#!/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/21y
# bakup website for 21yunwei
#author swh
time=`date +%Y%m%d`
[ ! -e /home/bakup/websitebak ] && mkdir -p /home/bakup/websitebak
cd /home/wwwroot/21y
文章正文
#!/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
代码注释
[!--zhushi--]