因为备份数据的不断扩大,需要把现网备份的数据(2T左右)传回到本地进行异地保存。但是2T太大了,需要进行压缩,这里采用了3G一个压缩包的方式。以下是压缩脚本
#!/bin/bash # 此脚本是全量压缩mongodb备份的文件 printf "开始mongodb备份压缩 $(date +%Y%m%d_%A_%Z%T)\n" cd /data_master/backup/ tar czf - picdb | split -b 3072m - picdb.tar.gz if [ $? != 0 ] then printf "mongodb备份压缩失败 $(date +%Y%m%d_%A_%Z%T)\n" else printf "mongodb备份压缩完成 $(date +%Y%m%d_%A_%Z%T)\n" fi echo "剩余容量: `df -h |awk -F '[ ]+' 'NR==7{print $4}'`"
压缩完的结果就是上图一样,只是个数较多。
接下来的问题是:现网网络带宽有限,如何把这些压缩包传回到本地。这里采用的 早上6点至晚上10点,进行限速传(限速500KB/s),晚上10点后至早上6点采取不限速。
#!/bin/bash # SFTP传输脚本 # IP地址 IP=本地IP # PORT端口 PORT=本地端口号 # USER用户名 USER=本地用户 # PASSWD密码 PASSWD=用户密码 #压缩包所在目录 CLIENTDIR=/data_master/backup/ #SFTP服务器待下载目录 SEVERDIR=/sftp/data_master/ # 设置当前小时 # xiaoshi=`date +"%Y-%m-%d %H:%M.%S"|awk -F "[ :]+" '{print $2}'` #待下载文件名 # FILE= while : do xiaoshi=`date +"%Y-%m-%d %H:%M.%S"|awk -F "[ :]+" '{print $2}'` if [ ${xiaoshi} -ge 6 ] && [ ${xiaoshi} -lt 22 ]; then echo "大于6时并小于22时,应该执行限速" File=`head -1 /home/lsy/Sftp.txt` printf "开始传输压缩备份 $(date +%Y%m%d_%A_%Z%T)\n" >>/home/lsy/sftp_file.log cd ${CLIENTDIR} lftp -u 用户,密码 sftp://本地IP地址:端口号 << EOF cd ${SEVERDIR} lcd ${CLIENTDIR} set net:limit-rate 500000:500000 reput ${File} by EOF if [ $? -eq 0 ] then echo "传输成功。下面是文件名" >>/home/lsy/sftp_file.log echo ${File} >>/home/lsy/sftp_file.log sleep 3 else echo "传输失败。" >>/home/lsy/sftp_file.log sleep 5 exit 2 fi sed -i 1d /home/lsy/Sftp.txt printf "传输完成 $(date +%Y%m%d_%A_%Z%T)\n" >>/home/lsy/sftp_file.log else echo "取消限速" File=`head -1 /home/lsy/Sftp.txt` printf "开始传输压缩备份 $(date +%Y%m%d_%A_%Z%T)\n" >>/home/lsy/sftp_file.log cd ${CLIENTDIR} lftp -u 用户,密码 sftp://本地IP:端口 << EOF cd ${SEVERDIR} lcd ${CLIENTDIR} reput ${File} by EOF if [ $? -eq 0 ] then echo "传输成功。下面是文件名" >>/home/lsy/sftp_file.log echo ${File} >>/home/lsy/sftp_file.log sleep 3 else echo "传输失败。" >>/home/lsy/sftp_file.log sleep 5 exit 2 fi sed -i 1d /home/lsy/Sftp.txt printf "传输完成 $(date +%Y%m%d_%A_%Z%T)\n" >>/home/lsy/sftp_file.log fi done curl -s "钉钉机器人" -H "Content-Type: application/json" -d "{'msgtype': 'text', 'text': {'content': \"$(date +%Y%m%d-%H%M%S):$(cat /home/lsy/sftp_file.log)\"}, 'at': {'isAtAll': true} }"
在这里有一点非常需要注意:set net:limit-rate 500000:500000 这个参数就是lftp进行限速的命令。网上找了好多文章,他们在 set net:limit-rate 500000,500000用的是,号 经过我实测和man lftp查看参数,这里用的是:希望大家少采坑。
希望能够帮助到大家,有喜欢文字的帮忙点个推荐。
谢谢 您的喜欢是我最大的动力