backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份

2017年12月7日20:58:44 发表评论 433 views

概述

backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份

 
本脚本目的是>将vps网站内容(文件夹和数据库)分割成指定附件大小发送邮件到邮箱作为备份
国内QQ和163邮箱无限容量,相当于永久免费备份.
适用于vps和独立服务器.
四步流程概览>>>
1>安装配置mutt邮件发送程序
2>安装7z压缩程序
3>修改backup2mail.sh脚本(收件人,要备份的文件夹,数据库等用户信息)
4>执行backup2mail.sh脚本
(tips:末尾文献部分是博主在研究这个脚本时所参考浏览过的文章.)
邮箱选择:163.
建议用国内邮箱附件主流50M,比国外主流30M附件容量多70%,这样生成的分割邮件会少很多.
QQ邮箱
50M/附件
优点: 收件比163快,经测试每天都能收到附件,并没有被拒收.
缺点: 自定义文件夹必须折叠,每次要点击两次。
163邮箱 
50M/附件
优点:自定义文件夹可以置顶,直接点击进入.
缺点:45M的压缩包接收比较慢,需要几十分钟,5M附件的邮件倒是能正常快速收到.实际延时测试>大约是22:09收到第一份5M附件邮件,22:16分收到45M附件邮件,相隔7分钟。
数据库是否选择压缩:压缩.(压缩后体积大约是未压缩的20%)
备份命令mysqldump格式:
格式:mysqldump -h主机名  -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql 
不压缩
1.48M
mysqldump -u数据库用户名 -p数据库密码 数据库名 > sqlbakup.sql
gz压缩后
300.41K
mysqldump -u数据库用户名 -p数据库密码 数据库名 | gzip > sqlbakup.sql.gz

文件夹压缩格式选择:7zip.
linux自带的tar.gz分卷方式在windwos下合并比较麻烦,需要敲命令.因此选用压缩率比较高的7z格式做分卷处理.(zip的压缩率太低,作为邮箱备份目的不在此考虑.)
原始文件夹体积 201 MB 命令简介
7za压缩后 64.43 MB centos安装7z:yum install p7zip

分卷:7za -v45M a /要存在哪个文件夹/文件名 /要压缩的目标文件夹
参数 -bt:显示执行时间统计信息

#默认等级压缩:
7za a /root/mail-test/zip/test2 /www/wwwroot/www.luoji.men backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份
[注*:"a"命令是添加已有,不反馈删除,因此需要作为脚本使用是需要先删除已存在压缩包]
#指定等级压缩:
7za -mx=5 a /root/mail-test/zip/test8  /www/wwwroot/www.luoji.menbackup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份-mx=0等于不压缩(参数1-9(看内存,我vultr的vps只能使用最高等级5压缩)

#分卷压缩,支持直接使用目录
7za -v45M a /root/mail-test/zip/test5 /www/wwwroot/www.luoji.men
backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份
zip压缩后 95.24 MB 压缩:zip -r /root/mail-test/zip/test.zip /root/mail-test/file/*
分卷:zip -s 200k file.zip --out ziptest    #分卷成200k一包
(注*:zip分卷需要先压缩成zip才能分卷)
BT宝塔备份
tar.gz
84.41 MB
tar -jcvf
bz2
79.56 MB tar -jcvf /root/mail-test/zip/tar-test.tar.bz2 /root/mail-test/file/
backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份
tar -zcvf
tgz
87.50 MB tar -zcvf /root/mail-test/zip/tar-test.tgz /www/wwwroot/www.luoji.men
backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份

压缩方式耗时对比:7z虽然压缩率高,但耗时确实很长。不过自用服务器负荷很小,虽然7z耗时长,但是压缩后的体积小,便于邮箱存放,适合作为每日发到邮箱备份。
测试压缩所用的文件夹体积 backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份
7z.zip.tar
耗时3分25秒
(不发邮件)
time backup.sh 同时使用三种压缩方式总耗时3分25秒(不发邮件)backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份
7z.zip.tar
耗时5分10秒
(发邮件)
 time backup2mail.sh 同时使用三种压缩方式总耗时5分10秒(发邮件)backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份
7z
耗时3分17秒
(不发邮件)
time backup.sh 仅使用7z压缩方式耗时3分17秒(不发邮件) backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份
zip
耗时52秒
(不发邮件)
time backup.sh 仅使用zip压缩耗时52秒(不发邮件)backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份
tar
耗时17秒
(不发邮件)
time backup.sh 仅使用tar压缩耗时17秒(不发邮件)backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份

安装mutt邮件发送服务

centos使用yum一条命令就安装完成

设置主机名
临时# hostname www.luoji.men 否则aliyun邮箱和gmail邮箱拒收(连垃圾邮箱都不给进).
成功后可修改成永久
设置发件人
默认设置很可能被作为作为垃圾邮件甚至拒收,
编辑 vi /etc/Muttrc
在开头添加发件人信息 :

编辑 vi /etc/Muttrc.local
添加set copy = no参数,意思是取消附件的拷贝

测试mutt发送邮件查看对方服务器是否能收到:
格式是:文本、标题、邮箱

backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份  

接着测试mutt发送附件

 格式是:文本、标题、邮箱、附件(-a 附件必须放在最后面,否则报错)

新建一个 vi fujian.txt 文档

查询当前路径:

发送附件

大约1分钟后,邮箱应当收到这封带有附件的邮件>

backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份

 backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份

 

安装7z压缩

测试7z分卷:
新建两个测试目录并在其中放进一个10M左右的文件

查看文件体积

查看当前完整路径

分卷压缩命令
格式:7za -v分卷大小 a /压缩包存放文件夹/压缩包名 /需要分卷压缩的文件夹
分卷成2M大小测试

进入/root/temp/output7z/查看是否正确生成分卷压缩包,如下分割分卷无误>


导出MySQL数据库测试

mysqldump -u用户名 -p用户密码 数据库名称 > 保存为文件.sql

mutt和7z还有数据库导出测试无误后.即可使用backup2mail脚本

backup2mail.sh脚本

本sh脚本特点:
1、支持分卷压缩,将目标数据分割成指定的附件体积发送到邮箱作为存档备份。
2、可选7z、zip、tar三种压缩方式,默认使用7z.
3、支持文件夹、数据库的备份

推荐脚本(7z压缩方式 backup2mail.sh

脚本使用测试:
测试100M的网站文件夹,被压缩成36M附件的邮件发送完毕大约2分钟后qq邮箱可以查到这封新邮件>
backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份

 backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份 


文件夹压缩率对比> 

文件夹体积 107M.

7z压缩 36.9M.
宝塔tar.gz压缩 50.44M.
两个压缩包下载后解压对比无异:

backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份


数据库压缩率对比>

不压缩导出数据库1.7M
7z压缩以上文件后:233K
使用gz压缩方式导出数据库331K
结论:还是7z优秀.


脚本二(zip压缩方式)

分卷压缩、通过mutt发送邮件
文件+数据库+计划任务版本
脚本维护时间>2017年9月17日20:00


脚本三(zip压缩方式.不含数据库) 

脚本维护时间>2017年9月16日21:55:43

脚本四(tar压缩方式.不含数据库)

/bin/bash /your-script-path/backup.sh


参考文献

mysql备份与还原 

http://www.cnblogs.com/Cherie/p/3309456.html

Linux使用Mutt发送邮件/附件 

http://www.isucc.me/129.html

VPS 自动备份脚本 

https://blog.onens.com/auto-backup-bash.html

用邮箱备份VPS的数据 超简易教程 

https://ilazycat.com/posts/2012/08/backup-vps-data-using-mailbox.html

[SHELL]备份系统文件并邮件发送

 http://showerlee.blog.51cto.com/2047005/1283408
backup2mail.sh 服务器内容自动压缩分卷成附件大小发送到邮箱备份

用python自动备份网站到你的邮件中 

https://blog.iw3c.com/archive/1085


压缩>综合相关

浅谈Linux下各种压缩 解压命令和压缩比率对比 http://blog.sina.com.cn/s/blog_407abb0d0100lajg.html

Linux下解压:tar、rar、7z命令简单易懂的教程(含实例)
http://blog.csdn.net/ac_huang/article/details/23279641

Linux zip分卷压缩 
http://blog.csdn.net/u010273224/article/details/54171696

Linux系统zip压缩命令详细参数,附文件排除选项的正确用法
 https://zhangge.net/4776.html

Linux 下zip包的压缩与解压
 https://www.cnblogs.com/chinareny2k/archive/2010/01/05/1639468.html

linux下分卷压缩,合并解压的3种方法 
http://blog.csdn.net/aree/article/details/50946137 、http://blog.51yip.com/linux/988.html

Linux下分卷压缩较大的文件 
http://blog.csdn.net/baggio1006/article/details/17503113

CentOS 安装 rar、zip 解压缩 
https://ehlxr.me/2016/12/22/CentOS-%E5%AE%89%E8%A3%85-rar%E3%80%81zip-%E8%A7%A3%E5%8E%8B%E7%BC%A9/

Linux下的压缩(zip)解压(unzip)缩命令
 http://blog.csdn.net/shenyunsese/article/details/17556089

压缩>7zip相关文献

CentOS中如何安装7ZIP  
https://teddysun.com/176.html

How to create multipart 7zip file in Linux? 
https://superuser.com/questions/184557/how-to-create-multipart-7zip-file-in-linux

How to use 7zip on Linux command Line
 https://www.ibm.com/developerworks/community/blogs/6e6f6d1b-95c3-46df-8a26-b7efd8ee4b57/entry/how_to_use_7zip_on_linux_command_line144?lang=en

Shell相关文献

shell 将字符串分割成数组 
https://my.oschina.net/5lei/blog/189559

Shell 数组元素个数${#array[@]} 数组的所有元素${array[*]} 字符串长度${#str} 
http://zhenshi4597.blog.51cto.com/1891465/871166

SHELL脚本中的数组 
http://smilejay.com/2016/04/array-in-bash/

Shell编程中的数组定义、遍历 
https://www.coder4.com/archives/3853

Shell数组:shell数组的定义、数组长度 
http://c.biancheng.net/cpp/view/7002.html

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: