脚本功能说明:备份对应数据文件后,会通过邮件附件形式发送到指定邮箱内,由于各种邮箱限制不同,可以修改“split -b 30m -d”中的30m。
站点文件结构如下
[root@kinggoo.com htdocs]# tree -L 1 . ├── kinggoo.com │?? ├── K.blog │?? ├── K.demo │?? ├── K.media ├── wanquer.com │?? └── blog ├── tscccn.com │?? └── blog
站点文件结构如下
所以请仔细阅读,如果你使用到里面的某一块就不需要了。
我以为我以前发过的,脚本由于后期修改过,所以有些变量名字起的比较随便,必定行数不是很多。
有问题请在文章下留言,我会尽快回复!
思考:其实我也在考虑,切割压缩包后,最大的那个包大小是永远不变的,是不是不需要二次发送。但没时间去做实验,其实可以认定是肯定一样的。ls -l备份包信息,31457280这一行的3个备份包大小均相同,如下:所以可以妄下一个决定就是不需要二次发送同样大小包(做个if判断大小即可了)。
-rw-r--r-- 1 kinggoo kinggoo 31457280 Apr 10 02:00 kinggoo.com.201304100200.tar.gz.K.00 -rw-r--r-- 1 kinggoo kinggoo 30006693 Apr 10 02:00 kinggoo.com.201304100200.tar.gz.K.01 -rw-r--r-- 1 kinggoo kinggoo 31457280 Apr 14 02:00 kinggoo.com.201304140200.tar.gz.K.00 -rw-r--r-- 1 kinggoo kinggoo 29943682 Apr 14 02:00 kinggoo.com.201304140200.tar.gz.K.01 -rw-r--r-- 1 kinggoo kinggoo 31457280 Apr 17 02:00 kinggoo.com.201304170200.tar.gz.K.00 -rw-r--r-- 1 kinggoo kinggoo 29929964 Apr 17 02:00 kinggoo.com.201304170200.tar.gz.K.01
脚本里用到了split
功能说明:切割文件。
语法:split [–help][–version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
补充说明:split可将文件切成较小的文件,预设每1000行会切成一个小文件。
参数:
-<行数>或-l<行数> 指定每多少行就要切成一个小文件。
-b<字节> 指定每多少字就要切成一个小文件。支持单位:m,k
-C<字节> 与-b参数类似,但切割时尽量维持每行的完整性。
–help 显示帮助。
–version 显示版本信息。
[输出文件名] 设置切割后文件的前置文件名,split会自动在前置文件名后再加上编号。
查看脚本
[root@kinggoo.com cron]# cat mysql_all.sh #!/bin/bash ### 次脚本针对wordpress配分,如用在其他地方,请自行修改验证后使用。 ### 说明,备份对应数据库后,会通过邮件附件形式发送到指定邮箱内,由于各种邮箱限制不同,可以修改“split -b 30m -d”中的30m即可。 ### author : Tscccn ### Site Blog: //kinggoo.com ### -- ### # # SQLNAME :数据库用户名(这个是可以备份全部数据的用户) # # SQLPASS :数据库密码 # # BACKUP :站点路径 # # DOMAIN_BLOG :备份文件存放路径 # # MYSQLPATH :mysql服务bin的路径,最后是"/"结束(为了防止变量出问题导致一些其他的恶心事情,有兴趣的可以查看 # # ARR_LIST、MAIL_LIST、DOMAIN、FILE :分别为数据库名称、邮件地址、域名(因为我里面是按域名区分的)、域名下一级文件夹名字、//kinggoo.com/webserverdown.htm) ### -- ### DATATIME=`date +%Y%m%d%H%M` WEEKDAY=`date +%A` SQLNAME=name.kinggoo.com SQLPASS=passwd.kinggoo.com BACKUP="/data/backup/" DOMAIN_BLOG="/data/website/" MYSQLPATH="/opt/webserver/mysql/bin/" declare -a ARR_LIST MAIL_LIST DOMAIN FILE ARR_LIST=( db1 db2 db3 ) MAIL_LIST=( "mail1@kinggoo.com" "mail2@kinggoo.com" "mail3@kinggoo.com" ) DOMAIN=( wanquer.me kinggoo.com tscccn.com ) #这里是因为我本地文件有不同的文件名,名不一样可以用这个地方,反正无所谓,也可以做个判断很简单 FILE=( blog K.blog blog ) i=0 while [ "$i" -lt "${#ARR_LIST[@]}" ] do ${MYSQLPATH}mysqldump -u ${SQLNAME} -p${SQLPASS} ${ARR_LIST[$i]} > ${BACKUP}${ARR_LIST[$i]}.${DATATIME}.sql cd ${DOMAIN_BLOG}${DOMAIN[$i]}/${FILE[$i]} && tar -zcf ${BACKUP}${DOMAIN[$i]}.wp_content.${DATATIME}.tar.gz ./wp-content/* > /dev/null cd ${BACKUP} && tar -zcf - ./${ARR_LIST[$i]}.${DATATIME}.sql ./${DOMAIN[$i]}.wp_content.${DATATIME}.tar.gz |split -b 30m -d - ${DOMAIN[$i]}.${DATATIME}.tar.gz.K. > /dev/null SUM_COUNT=`ls ${DOMAIN[$i]}.${DATATIME}.tar.gz.K.* |wc -l` sleep 1 if [ "${WEEKDAY}" = "Wednesday" ];then M_i=0 while [ "${M_i}" -lt "${SUM_COUNT}" ] do if [ ${SUM_COUNT} -lt "10" ];then M_i="0${M_i}";fi echo "Backup Of Your Site(${DOMAIN[$i]}), Include: DB(${ARR_LIST[$i]}), FILE(wp-content), Attachment Count:(${M_i}/${SUM_COUNT})" |mutt -s "New Message ${DATATIME}:Your Backups ${DOMAIN[$i]}.${DATATIME}" ${MAIL_LIST[$i]} -a ${BACKUP}${DOMAIN[$i]}.${DATATIME}.tar.gz.K.${M_i} > /dev/null sleep 5 ((M_i=${M_i}+1)) done #yes|cp /var/mail/root /root/sent #####此处是因为我对mutt发邮件处理,不然每次都变大 fi ((i=$i+1)) done find /data/backup/ -type f -mtime +8 -exec rm -f {} \; unset SQLNAME SQLPASS BACKUP DOMAIN_BLOG MYSQLPATH
文章中涉及到:
Shell脚本内使用数组,方便修改配置增加灵活度,减少脚本长度
msmtp使用特定邮箱地址发邮件-Mutt协作篇
安装mutt后会存在sent大文件的原因及解决办法
主题不错啊,支持博主
wordpress数据备份是这样农的吗 我还不错能 唉学习了
只是可以这样弄 因为是自己的服务器 所以这样备份,如果你的是虚拟主机 就不能用这个办法了
感谢楼主分享,谢谢
希望有帮助
wp有很多东西要学习 太强大了
是的