vps内wordpress数据备份切割后发送到指定邮箱脚本

脚本功能说明:备份对应数据文件后,会通过邮件附件形式发送到指定邮箱内,由于各种邮箱限制不同,可以修改“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: http://kinggoo.com
###             --              ###
# # SQLNAME	:数据库用户名(这个是可以备份全部数据的用户)
# # SQLPASS	:数据库密码
# # BACKUP	:站点路径
# # DOMAIN_BLOG	:备份文件存放路径
# # MYSQLPATH	:mysql服务bin的路径,最后是"/"结束(为了防止变量出问题导致一些其他的恶心事情,有兴趣的可以查看
# #	ARR_LIST、MAIL_LIST、DOMAIN、FILE :分别为数据库名称、邮件地址、域名(因为我里面是按域名区分的)、域名下一级文件夹名字、http://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大文件的原因及解决办法

- THE END -
版权声明:
转载原创文章请注明,文章出处:http://kinggoo.com
原文地址:http://kinggoo.com/vpswpbackup.htm
发表评论?

7 条评论。

  1. 主题不错啊,支持博主

  2. wordpress数据备份是这样农的吗 我还不错能 唉学习了

  3. 感谢楼主分享,谢谢

  4. wp有很多东西要学习 太强大了

发表评论