概述
本脚本目的是>将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 /要存在哪个文件夹/文件名 /要压缩的目标文件夹 #默认等级压缩:
7za a /root/mail-test/zip/test2 /www/wwwroot/www.luoji.men
[注*:"a"命令是添加已有,不反馈删除,因此需要作为脚本使用是需要先删除已存在压缩包]
#指定等级压缩:
7za -mx=5 a /root/mail-test/zip/test8 /www/wwwroot/www.luoji.men-mx=0等于不压缩(参数1-9(看内存,我vultr的vps只能使用最高等级5压缩)
#分卷压缩,支持直接使用目录
7za -v45M a /root/mail-test/zip/test5 /www/wwwroot/www.luoji.men
|
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/ |
tar -zcvf tgz |
87.50 MB | tar -zcvf /root/mail-test/zip/tar-test.tgz /www/wwwroot/www.luoji.men |
压缩方式耗时对比:7z虽然压缩率高,但耗时确实很长。不过自用服务器负荷很小,虽然7z耗时长,但是压缩后的体积小,便于邮箱存放,适合作为每日发到邮箱备份。 | |
测试压缩所用的文件夹体积 | |
7z.zip.tar 耗时3分25秒 (不发邮件) |
time backup.sh 同时使用三种压缩方式总耗时3分25秒(不发邮件) |
7z.zip.tar 耗时5分10秒 (发邮件) |
time backup2mail.sh 同时使用三种压缩方式总耗时5分10秒(发邮件) |
7z 耗时3分17秒 (不发邮件) |
time backup.sh 仅使用7z压缩方式耗时3分17秒(不发邮件) |
zip 耗时52秒 (不发邮件) |
time backup.sh 仅使用zip压缩耗时52秒(不发邮件) |
tar 耗时17秒 (不发邮件) |
time backup.sh 仅使用tar压缩耗时17秒(不发邮件) |
安装mutt邮件发送服务
centos使用yum一条命令就安装完成
1 |
yum install -y mutt |
设置主机名
临时# hostname www.luoji.men 否则aliyun邮箱和gmail邮箱拒收(连垃圾邮箱都不给进).
成功后可修改成永久
设置发件人
默认设置很可能被作为作为垃圾邮件甚至拒收,
编辑 vi /etc/Muttrc
在开头添加发件人信息 :
1 2 3 4 5 |
set from="mutt@www.luoji.men" set use_from=yes set envelope_from="yes" set realname="mutt" |
编辑 vi /etc/Muttrc.local
添加set copy = no参数,意思是取消附件的拷贝
1 2 3 4 |
# Local configuration for Mutt. set copy = no set copy=no #不生成sent文件 sent为附件的拷贝累加 这个文件体积会变得很大 使用一个月已经6g大小 |
测试mutt发送邮件查看对方服务器是否能收到:
格式是:文本、标题、邮箱
1 2 |
[root@VIRMACH ~]# echo "Text" | mutt -s "virmach" "xxxx@163.com" [root@VIRMACH ~]# |
接着测试mutt发送附件:
格式是:文本、标题、邮箱、附件(-a 附件必须放在最后面,否则报错)
1 2 |
正确语法 echo "Test" | mutt -s "mysql backup" xxxx@qq.com -a /fujian.txt 错误语法 echo "Test" | mutt -s "mysql backup" -a /fujian.txt xxxx@qq.com |
新建一个 vi fujian.txt 文档
1 2 |
[root@VIRMACH ~]# ls fujian.txt |
查询当前路径:
1 2 |
[root@VIRMACH ~]# pwd /root |
发送附件
1 |
echo "Text" | mutt -s "Title" "xxxxx@163.com" -a "/root/fujian.txt" |
大约1分钟后,邮箱应当收到这封带有附件的邮件>
安装7z压缩
1 |
centos安装7z:yum install p7zip |
测试7z分卷:
新建两个测试目录并在其中放进一个10M左右的文件
1 2 3 |
[root@VIRMACH temp]# mkdir output7z [root@VIRMACH temp]# mkdir source && cd source [root@VIRMACH source]# wget https://wordpress.org/latest.tar.gz |
查看文件体积
1 2 3 |
[root@VIRMACH source]# ls -lh total 9.2M -rw-r--r-- 1 root root 9.2M Nov 30 03:07 latest.tar.gz |
查看当前完整路径
1 2 |
[root@VIRMACH source]# pwd /root/temp/source |
分卷压缩命令
格式:7za -v分卷大小 a /压缩包存放文件夹/压缩包名 /需要分卷压缩的文件夹
分卷成2M大小测试
1 |
7za -v2M a /root/temp/output7z/source2p7z /root/temp/source/ |
进入/root/temp/output7z/查看是否正确生成分卷压缩包,如下分割分卷无误>
1 2 3 4 5 6 7 8 |
[root@VIRMACH output7z]#cd /root/temp/output7z/ [root@VIRMACH output7z]# ls -lh total 9.1M -rw-r--r-- 1 root root 2.0M Dec 7 15:44 source2p7z.7z.001 -rw-r--r-- 1 root root 2.0M Dec 7 15:44 source2p7z.7z.002 -rw-r--r-- 1 root root 2.0M Dec 7 15:44 source2p7z.7z.003 -rw-r--r-- 1 root root 2.0M Dec 7 15:44 source2p7z.7z.004 -rw-r--r-- 1 root root 1.1M Dec 7 15:44 source2p7z.7z.005 |
导出MySQL数据库测试
mysqldump -u用户名 -p用户密码 数据库名称 > 保存为文件.sql
1 2 3 4 |
[root@VIRMACH source]# mysqldump -uuser -ppasswd database > backup.sql [root@VIRMACH source]# ls -lh -rw-r--r-- 1 root root 882K Dec 7 18:17 bakcup.sql [root@VIRMACH source]# |
mutt和7z还有数据库导出测试无误后.即可使用backup2mail脚本
1、支持分卷压缩,将目标数据分割成指定的附件体积发送到邮箱作为存档备份。
2、可选7z、zip、tar三种压缩方式,默认使用7z.
3、支持文件夹、数据库的备份
推荐脚本(7z压缩方式 ) backup2mail.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
#!/bin/bash declare -a file #此条重要勿改.声明file为数组变量 ######## 必须修改的变量 ######## mail="xxxxxx@qq.com" ###自定义.要发往的邮箱 svr_name="[www.luoji.men]" ###自定义.生成备份文件和邮件的名称 ##附件生成目录 dir_back=/home/root/backup2mail/ ###压缩包将保存的位置.一般使用/home/用户名/backup2mail/,或者/root/backup2mail/ ##网站目录: file[0]=/www/wwwroot/wordpress/ ###自定义.需要压缩的目标文件夹 每行可设置一个文件或文件夹 如果数量不够可以自己加 #file[1]=/www/wwwroot/rutorrent/ ###可以添加多个文件夹 格式为 file[N]=路径 其中N请按顺序填写 ##网站数据库mysql: sql_user=用户名 ###自定义.你的mysql用户名 推荐使用root用户,以免出现权限问题 sql_pass=数据库密码 ###自定义.上面用户对应的密码 declare -a data #声明data为数组变量 data[0]=数据库名称 ###自定义.这里填写要备份的数据库名 依旧一行一个 不够了自己加 #data[1]=mysql_db_2 ###可以添加多个数据库名 格式为 file[N]=路径 其中N请按顺序填写 ######## 可不修改的变量 ######## str_time=$(date +"%Y-%m-%d") #日期变量 title="Backup $svr_name $str_time" #邮件标题 text="$svr_name Backup File $str_time" #邮件内容文本 ######## 目录初始化 ######## if [ -d $dir_back ]; then rm -rf $dir_back #如果压缩包保存目录已经存在 则删除目录 fi mkdir -p $dir_back #创建压缩包将保存的目录 list=${dir_back}file.lst #文件列表 ######## crontab ####备份的项.导出cromtab计划任务并添加到list列表#### tsk_list=${dir_back}crontab-$str_time crontab -l >> $tsk_list echo $tsk_list >> $list ######## mysql ####备份的项.导出数据库并将文件路径添加到list列表#### for var in ${data[@]}; do sql_file=${dir_back}db-$var-$str_time.sql mysqldump -u$sql_user -p$sql_pass $var > $sql_file echo $sql_file >> $list done ######## files ####备份的项.文件目录路径添加到list列表#### for var in ${file[@]}; do echo $var >> $list done ######## 压缩与分卷 含7z和zip和tar压缩方式 将不用的压缩方式注释 ######## ####推荐.使用7z压缩可直接对目标进行分卷 z7z_split=${dir_back}$svr_name-backup-$str_time.split-7z #变量必须英文开头 因此7z改成z7z 7za -v45m a $z7z_split `cat $list` ####使用zip压缩 #zip_file=${dir_back}$svr_name-backup-$str_time.zip #zip必须先压缩才能分卷 #zip_split=${dir_back}$svr_name-backup-$str_time.split-zip.zip #分卷后的压缩包文件名 #zip -r $zip_file `cat $list` #压缩目标位置 支持列表方式 #zip -s 45m /$zip_file --out $zip_split #分卷存在的zip压缩包 ####使用tar压缩 #tar_file=${dir_back}$svr_name-backup-$str_time.tar #tar压缩包名称 #tar_split=${dir_back}$svr_name-backup-$str_time.split-tar. #tar分卷名称 #tar zcPf $tar_file.gz `cat $list` #压缩目标位置 支持列表方式 #split -b 45m -a 3 -d $tar_file.gz $tar_split #分卷存在的tar压缩包 ####### 发送邮件 ######## for var in ${dir_back}*split*; do #匹配含有split字符的文件 echo $var arr=(${dir_back}*split*) #将附件文件名转换成数组 目的是为了获取附件总量 达到在邮件标题显示[1/3][2/3][3/3]标识当前邮件是总分卷邮件中的第几个 num=${#arr[@]} #获取数组的总个数 echo ${#arr[@]} let ++i #i的值递增1 echo $i echo "$text[$i/${#arr[@]}]" echo "$text[$i/$num]" | mutt -s "$title[$i/$num]" $mail -a $var #通过mutt发送附件 每个附件发送一封 sleep 10s #循环等待时间 邮件发送太快可能不好 被对方服务器拒收 但我并没有观察到这个显现 只是为了保险 done |
脚本使用测试:
测试100M的网站文件夹,被压缩成36M附件的邮件发送完毕大约2分钟后qq邮箱可以查到这封新邮件>
文件夹压缩率对比>
文件夹体积 107M.
7z压缩 36.9M.
宝塔tar.gz压缩 50.44M.
两个压缩包下载后解压对比无异:
数据库压缩率对比>
1 2 3 |
1.7M db-www_luoji_men-2017-12-07.sql 233K database7z.7z 331K sqlbakup.sql.gz |
不压缩导出数据库1.7M
7z压缩以上文件后:233K
使用gz压缩方式导出数据库331K
结论:还是7z优秀.
脚本二(zip压缩方式)
分卷压缩、通过mutt发送邮件
文件+数据库+计划任务版本
脚本维护时间>2017年9月17日20:00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#!/bin/bash ######## 需要自定义修改的变量 ######## svr_name="[luoji.men]" ###修改备份的名称 dir_back=/root/mail-test/backup/ ###修改压缩包保存位置 mail="xxxxx@qq.com" ###修改要发往的邮箱 declare -a file #声明file为数组变量 file[0]=/root/mail-test/file/ ###修改需要压缩的目标文件夹 每行可设置一个文件或文件夹 如果数量不够可以自己加 file[1]=/root/mail-test/file2/ ###可以添加多个文件夹 格式为 file[N]=路径 其中N请按顺序填写 sql_user=数据库用户名 ###修改你的mysql用户名 推荐使用root用户,以免出现权限问题 sql_pass=数据库密码 ###修改上面的用户对应的密码 declare -a data #声明data为数组变量 data[0]=数据库名 ###修改这里填写要备份的数据库名 依旧一行一个 不够了自己加 #data[1]=mysql_db_2 ###可以添加多个文件夹 格式为 file[N]=路径 其中N请按顺序填写 ######## 不需要修改的变量 ######## str_time=$(date +"%Y-%m-%d") #日期变量 zip_file=${dir_back}$svr_name-backup-$str_time.zip #压缩包文件名 zip_split=${dir_back}$svr_name-backup-$str_time.zipsplit.zip #分卷后的压缩包文件名 title="Backup File $str_time $svr_name" #邮件标题 text="$svr_name Backup File $str_time" #邮件内容文本 ######## 目录初始化 ######## if [ -d $dir_back ]; then rm -rf $dir_back #如果压缩包保存目录已经存在 则删除目录 fi mkdir -p $dir_back #创建压缩包保存目录 list=${dir_back}file.lst #文件列表 ######## crontab ####计划任务备份#### tsk_list=${dir_back}crontab-$str_time crontab -l >> $tsk_list echo $tsk_list >> $list ######## mysql ####数据库备份#### for var in ${data[@]}; do sql_file=${dir_back}db-$var-$str_time.sql mysqldump -u$sql_user -p$sql_pass $var > $sql_file echo $sql_file >> $list done ######## files ####文件备份#### for var in ${file[@]}; do echo $var >> $list done ######## 压缩与分卷 ######## zip -r $zip_file `cat $list` #压缩目标位置 支持列表方式 zip -s 300k /$zip_file --out $zip_split #分卷存在的压缩包 ####### 发送邮件 ######## for var in ${dir_back}*zipsplit.*; do #匹配含有zipsplit字符的文件 echo $var arr=(${dir_back}*zipsplit.*) #将附件文件名转换成数组 目的是为了获取附件总量 达到在邮件标题显示[1/3][2/3][3/3]是总分卷附件中的第几个 num=${#arr[@]} #获取数组的总个数 echo ${#arr[@]} let ++i #i的值递增1 echo $i echo "$text[$i/${#arr[@]}]" echo "$text[$i/$num]" | mutt -s "$title[$i/$num]" $mail -a $var #通过mutt发送附件 每个附件发送一封 sleep 3s #循环等待时间 邮件发送太快可能不好 被对方服务器拒收 但我并没有观察到这个显现 只是为了保险 done |
脚本三(zip压缩方式.不含数据库)
脚本维护时间>2017年9月16日21:55:43
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
[root@vultr mail-test]# cat zipmail.sh #!/bin/bash # This script run at 02:00 every Tuesday svr_name="[luoji.men]" #备份的名称 dir_back=/root/mail-test/zip/ #压缩包保存位置 mail="xxxxx@qq.com" #要发往的邮箱 declare -a file #声明file为数组变量 file[0]=/root/mail-test/file/ #需要压缩的目标文件夹 每行可设置一个文件或文件夹 如果数量不够可以自己加 file[1]=/root/mail-test/file2/ #可以添加多个文件夹 格式为 file[N]=路径 其中N请按顺序填写 ########################### str_time=$(date +"%Y-%m-%d") #日期变量 zip_file=${dir_back}$svr_name-backup-$str_time.zip #压缩包文件名 zip_split=${dir_back}$svr_name-backup-$str_time.zipsplit.zip #分卷后的压缩包文件名 title="Backup File $str_time $svr_name" #邮件标题 text="$svr_name Backup File $str_time" #邮件内容文本 #################################### if [ -d $dir_back ]; then rm -rf $dir_back #如果压缩包保存目录已经存在 则删除目录 fi mkdir -p $dir_back #创建压缩包保存目录 list=${dir_back}file.lst #文件列表 # files for var in ${file[@]}; do echo $var >> $list done zip -r $zip_file `cat $list` #压缩目标位置 支持列表方式 zip -s 100k /$zip_file --out $zip_split #分卷压缩包 ####### for var in ${dir_back}*zipsplit.*; do #匹配含有zipsplit字符的文件 echo $var arr=(${dir_back}*zipsplit.*) #将附件文件名转换成数组 目的是为了获取附件总量 达到在邮件标题显示[1/3][2/3][3/3]是总分卷附件中的第几个 num=${#arr[@]} #获取数组的总个数 echo ${#arr[@]} let ++i #i的值递增1 echo $i echo "$text[$i/${#arr[@]}]" echo "$text[$i/$num]" | mutt -s "$title[$i/$num]" $mail -a $var #通过mutt发送附件 每个附件发送一封 sleep 3s #循环等待时间 邮件发送太快可能不好 被对方服务器拒收 但我并没有观察到这个显现 只是为了保险 done |
脚本四(tar压缩方式.不含数据库)
/bin/bash /your-script-path/backup.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#!/bin/bash str_time=$(date +"%Y-%m-%d") dir_back=/home/backup/ tar_file=${dir_back}backup-$str_time.tar mail="xxxx@qq.com" #在这里设定收件人地址 title="Backup File $str_time luoji.men" text="luoji.men Backup File $str_time" #这里可以设置邮件的标题 最后的$str_time不要动 declare -a file file[0]=/www/backup/luoji_men #在这里设置需要备份的内容 每行可设置一个文件或文件夹 如果数量不够可以自己加 #file[1]=/other-file #格式为 file[N]=路径 其中 N请按顺序填写 #################################### if [ -d $dir_back ]; then rm -rf $dir_back fi mkdir -p $dir_back list=${dir_back}file.lst # files for var in ${file[@]}; do echo $var >> $list done tar zcPf $tar_file.gz `cat $list` split -b 20m -a 3 -d $tar_file.gz ${dir_back}backup-$str_time.part. #cat ${dir_back}backup-* > ${dir_back}backup.tar.gz for var in ${dir_back}*.part.*; do echo "$text" | mutt -s "$title" $mail -a $var #var为附件 sleep 30s done |
参考文献
mysql备份与还原
http://www.cnblogs.com/Cherie/p/3309456.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
一、备份常用操作基本命令 1、备份命令mysqldump格式 格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql 2、备份MySQL数据库为带删除表的格式 备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。 mysqldump --add-drop-table -uusername -ppassword -database databasename > backupfile.sql 3、直接将MySQL数据库压缩备份 mysqldump -hhostname -uusername -ppassword -database databasename | gzip > backupfile.sql.gz 二、增量备份 小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份。增量备份的原理就是使用了mysql的binlog志。 1、首先做一次完整备份: mysqldump -h10.6.208.183 -utest2 -p123 -P3310 --single-transaction --master-data=2 test>test.sql这时候就会得到一个全备文件test.sql 在sql文件中我们会看到: -- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;是指备份后所有的更改将会保存到bin-log.000002二进制文件中。 2、在test库的t_student表中增加两条记录,然后执行flush logs命令。这时将会产生一个新的二进制日志文件bin-log.000003,bin-log.000002则保存了全备过后的所有更改,既增加记录的操作也保存在了bin-log.00002中。 3、再在test库中的a表中增加两条记录,然后误删除t_student表和a表。a中增加记录的操作和删除表a和t_student的操作都记录在bin-log.000003中。 三、恢复 1、首先导入全备数据 mysql -h10.6.208.183 -utest2 -p123 -P3310 < test.sql,也可以直接在mysql命令行下面用source导入 2、恢复bin-log.000002 mysqlbinlog bin-log.000002 |mysql -h10.6.208.183 -utest2 -p123 -P3310 3、恢复部分 bin-log.000003 在general_log中找到误删除的时间点,然后更加对应的时间点到bin-log.000003中找到相应的position点,需要恢复到误删除的前面一个position点。 可以用如下参数来控制binlog的区间 --start-position 开始点 --stop-position 结束点 --start-date 开始时间 --stop-date 结束时间 找到恢复点后,既可以开始恢复。 mysqlbinlog mysql-bin.000003 --stop-position=208 |mysql -h10.6.208.183 -utest2 -p123 -P3310 |
Linux使用Mutt发送邮件/附件
http://www.isucc.me/129.html
1 2 3 4 5 6 7 |
Centos安装 # yum install -y mutt 2.使用方法 最简单的测试方法 echo "Test" | mutt -s "Title" xxxx@qq.com 带附件的 echo "Test" | mutt -s "mysql backup" -a /mysql.tar.gz xxxx@qq.com |
VPS 自动备份脚本
https://blog.onens.com/auto-backup-bash.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
没事自己写了两个脚本,一个是备份网站文件,另一个是备份数据库和配置文件,并把备份文件发送到邮箱。 安装 mutt: yum install mutt vim ~/.muttrc # Add the following set envelope_from=yes set from=backup@yourdomain.com set realname="Backup" set use_from=yes backup.sh: config.sh: crontab: 0 2 * * 2 /bin/bash /your-script-path/backup.sh 0 1 * * * /bin/bash /your-script-path/config.sh |
用邮箱备份VPS的数据 超简易教程
https://ilazycat.com/posts/2012/08/backup-vps-data-using-mailbox.html
1 2 3 |
DataBackUP.sh 额刚才忘了说了,这个脚本分为两部分,一部分是备份数据,一部分是备份数据库和配置文件的。。。这一部分是备份网站数据用得。。。 你要是觉得麻烦可以用最后一个整合的脚本。。。 |
[SHELL]备份系统文件并邮件发送
http://showerlee.blog.51cto.com/2047005/1283408
1 2 3 4 5 6 |
(版本三) 实现rar分割并附件发送 推荐附件超过50M的用户使用 # 安装rar rar=$(rar | grep RAR | awk '{print $1}'| sed -n '1p') if [ $? != 0 ];then |
用python自动备份网站到你的邮件中
https://blog.iw3c.com/archive/1085
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 备份名称,用于标记 BAKUP_NAME="bakup" # 备份目录,多个请空格分隔 BAKUP_SRC="/home/wwwroot/iw3c.com" # 备份文件临时存放目录,一般不需要更改 BAKUP_DIR="/tmp/bakuptoemail" # Mysql主机地址 MYSQL_SERVER="localhost" # Mysql用户名 MYSQL_USER="root" # Mysql密码 MYSQL_PASS="password" # Mysql备份数据库,多个请空格分隔 MYSQL_DBS="iw3c_com_db " # 备份文件压缩密码 BAKUP_FILE_PASSWD="iw3c.com" # 邮件SMTP地址 THESMTP_HOST="smtp.xxx.com" # 邮件登录帐号 THESMTP_USER='aries@xxx.com' # 邮件登录密码 THESMTP_PWD='password' # 邮件接收地址 THESMTP_TO='xxx@xxx.com' |
压缩>综合相关
浅谈Linux下各种压缩 解压命令和压缩比率对比 http://blog.sina.com.cn/s/blog_407abb0d0100lajg.html
1 2 3 4 5 6 |
综合起来,在压缩比率上: tar.bz=tar.bz2>tgz>tar 耗费时间(打包,解压) 打包:tar.bz>tar.bz2>tgz>tar 解压: tar.bz>tar.bz2>tar>tgz 因此,Linux下对于占用空间与耗费时间的折衷多选用tgz格式,不仅压缩率较高,而且打包、解压的时间都较为快速,是较为理想的选择。 如果对效率很关切,非常在乎时间的话,选择tgz tar的方式都不错。当然,如果disk空间较为紧张,非常在乎空间的话,选择高压缩比率的tar.bz2则更为适宜。 |
Linux下解压:tar、rar、7z命令简单易懂的教程(含实例)
http://blog.csdn.net/ac_huang/article/details/23279641
1 2 3 4 5 6 7 8 |
tar命令常见参数与实例: ——————————————————————————————————- 必须的参数:(3个参数不能共存) -c :创建压缩文件c代表create。 7z文件到解压缩实例 ——————————————————————————————————- 安装:Redhat、Fedora、Centos安装命令:yum install p7zip |
Linux zip分卷压缩
http://blog.csdn.net/u010273224/article/details/54171696
1 2 3 4 5 |
分卷压缩的话,需要先将文件打包成一个zip包,然后执行 zip -s SIZE origin.zip --out new.zip SIZE为分卷的大小4m,4g,4t等 解压的时候需要先将它合并才能正常解压 zip spiltfile.zip -s=0 --out single.zip |
Linux系统zip压缩命令详细参数,附文件排除选项的正确用法
https://zhangge.net/4776.html
1 2 3 4 5 |
这次给博客添加了纯代码缓存之后,发现缓存文件竟然达到了50多MB!而我的服务器每次还需要同步至七牛,文件体积的增加都会增加文件远程同步备份的时间。因此,我第一想到的办法就是在网站ZIP压缩打包的时候排除缓存文件夹。 下面是从网上找来的ZIP命令参数: zip Linux上适用的参数: -1 : 最快压缩,压缩率最差。 -9 : 最大压缩,压缩率最佳。 |
Linux 下zip包的压缩与解压
https://www.cnblogs.com/chinareny2k/archive/2010/01/05/1639468.html
1 2 3 4 5 6 7 |
linux zip 命令详解 功能说明:压缩文件。 语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>] 补充说明:zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。 参 数: -A 调整可执行的自动解压缩文件。 -b<工作目录> 指定暂时存放文件的目录。 |
linux下分卷压缩,合并解压的3种方法
http://blog.csdn.net/aree/article/details/50946137 、http://blog.51yip.com/linux/988.html
1 |
我们上传东西的时候,由于文件过大而不能上传,或者不给上传,最明显的就是发邮件了,附件最大5M,有的10M。如果超过了就郁闷了。这个时候,如果能把压缩的东西,分割开来就比较爽了,windows下面我想大家知道怎么分割,利用winrar,winzip图型化设置压缩出来的块的大小。但是在linux下面有没有这样的方法了,linux下面有rar命令,有zip命令,windows下面这二种方式可以分割压缩,我想linux下面绝对也是可以的。下面是我尝试过程的记录: |
Linux下分卷压缩较大的文件
http://blog.csdn.net/baggio1006/article/details/17503113
1 2 3 4 5 |
附录:split命令的使用 split proc.tar.gz -b 2m #将proc.tar.gz文件分割为多个小文件,并保持每个小文件的大小不超过2m字节。命令运行后,源文件依然存在。生成的小文件以默认格式命名,为:xaa、xab等 split proc.tar.gz -b 2m -d #基本同上,只是生成的小文件以数字格式命名,为:x00、x01等 split proc.tar.gz -b 2m -d proc.tar.gz #基本同上,只是生成的小文件名前缀是自定义的,为:proc.tar.gz00、proc.tar.gz01等 split a.txt -C 300k -d a.txt #将a.txt文本文件分割为多个小文件,并保持每个小文件的大小不超过300k字节,而且尽量保持每行的完整性 |
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/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Windows 系统压缩的 rar 和 zip 文件,在 Linux 系统下是无法通过 tar 命令解压缩的,需要使用 rar 和 zip 命令来解压缩。下面记录一下 rar 和 zip 安装和简单的使用。 一、rar 安装使用 Linux 系统下使用 rarlinux 解压缩 rar 压缩文件,下载页面:http://www.rarsoft.com/download.htm。 1.1 下载系统对应的版本 2.2 安装 zip、unzip $ yum install zip $ yum install unzip 2.3 常用命令 $ zip -r myfile.zip ./* # 将当前目录下的所有文件和文件夹全部压缩成 myfile.zip 文件,-r 表示递归压缩子目录下所有文件. $ unzip -o -d /home/sunny myfile.zip # 把 myfile.zip 文件解压到 /home/sunny/ # -o :不提示的情况下覆盖文件 # -d:将文件解压缩到指定目录下 $ zip -d myfile.zip smart.txt # 删除压缩文件中 smart.txt 文件 $ zip -m myfile.zip ./rpm_info.txt # 向压缩文件中 myfile.zip 中添加 rpm_info.txt 文件 |
Linux下的压缩(zip)解压(unzip)缩命令
http://blog.csdn.net/shenyunsese/article/details/17556089
1 2 3 4 5 6 7 8 9 |
1.zip命令 zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. zip -r filename.zip filesdir 在这个例子里,filename.zip 代表你创建的文件,filesdir 代表你想放置新 zip 文件的目录。-r 选项指定你想递归地(recursively)包括所有包括在 filesdir 目录中的文件。 你可以使用 zip 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔: zip -r filename.zip file1 file2 file3 /usr/work/school 上面的命令把 file1、file2、 file3、以及 /usr/work/school 目录的内容(假设这个目录存在)压缩起来,然后放入 filename.zip 文件中。 |
压缩>7zip相关文献
CentOS中如何安装7ZIP
https://teddysun.com/176.html
1 2 3 4 5 6 7 8 9 10 11 12 |
使用7zip的命令是7za。 安装完成后的使用方法: 7za {a|d|l|e|u|x} 压缩包文件名 {文件列表或目录,可选} a 向压缩包里添加文件或创建压缩包,如向001.7z添加001.jpg,执行:7za a 001.7z 001.jpg;将001目录打包执行:7za a 001.7z 001; d 从压缩里删除文件,如将001.7z里的001.jpg删除,执行:7za d 001.7z 001.jpg l 列出压缩包里的文件,如列出001.7z里的文件,执行:7za l 001.7z e 解压到当前目录,目录结构会被破坏,如001.rar内有如下目录及文件123/456/789.html, 执行:7za e 001.rar,目录123和456及文件789.html都会存放在当前目录下。 x 以完整路径解压。 zip文件解压中文文件乱码问题,由于zip文件中没有声明其编码,所以在Linux上使用unzip解压以默认编码解压,中文文件名会出现乱码。 |
How to create multipart 7zip file in Linux?
https://superuser.com/questions/184557/how-to-create-multipart-7zip-file-in-linux
1 2 3 |
Full command example: 7z -v100m a my_zip.7z my_folder/ Use the -v option (v is for volume) -v100m will split the archive into chunks of 100MB. 7z -v option supports b k m g (bytes, kilobytes, megabytes, gigabytes) |
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
1 2 3 |
7z uses plugins to handle archives. 7za is a stand-alone executable. 7za handles fewer archive formats than 7z, but does not need any others. 7zr is a stand-alone executable. 7zr handles fewer archive formats than 7z, but does not need any others. 7zr is a "light-version" of 7za that only handles 7z archives. |
Shell相关文献
shell 将字符串分割成数组
https://my.oschina.net/5lei/blog/189559
1 2 |
a="one,two,three,four" arr=($a)用于将字符串$a分割到数组$arr ${arr[0]} ${arr[1]} |
Shell 数组元素个数${#array[@]} 数组的所有元素${array[*]} 字符串长度${#str}
http://zhenshi4597.blog.51cto.com/1891465/871166
1 2 3 |
1、获取数组元素的个数: array=(bill chen bai hu); num=${#array[@]} |
SHELL脚本中的数组
http://smilejay.com/2016/04/array-in-bash/
1 2 3 4 5 6 |
4. 数组的长度(元素的个数)和元素的字符串长度 数组的长度就是元素的个数,通过 ${#array_name[@]} 或 ${#array_name[*]} 获取;其中某个元素的字符串长度 ${#array_name[index]} 。 5. 数组的截断 {array_name[@]:1} 表示除了第1个元素(小标0)之外的所有元素 {array_name[@]:1:4} 表示第2、3、4个(下标为1,2,4-1)元素 |
Shell编程中的数组定义、遍历
https://www.coder4.com/archives/3853
1 2 3 4 5 6 7 |
数组定义: arr=(1 2 3 4 5) # 注意是用空格分开,不是逗号!! 数组定义法2: array array[0]="a" array[1]="b" array[2]="c" |
Shell数组:shell数组的定义、数组长度
http://c.biancheng.net/cpp/view/7002.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
定义数组 在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为: array_name=(value1 ... valuen) 例如: array_name=(value0 value1 value2 value3) 或者 array_name=( value0 value1 value2 value3 ) 还可以单独定义数组的各个分量: array_name[0]=value0 array_name[1]=value1 array_name[2]=value2 可以不使用连续的下标,而且下标的范围没有限制。 读取数组 读取数组元素值的一般格式是: ${array_name[index]} 例如: valuen=${array_name[2]} 获取数组的长度 获取数组长度的方法与获取字符串长度的方法相同,例如: # 取得数组元素的个数 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 取得数组单个元素的长度 lengthn=${#array_name[n]} |