背景介紹:
由於備份數據的不斷擴大,須要把現網備份的數據(2T左右)傳回到本地進行異地保存。可是2T太大了,須要進行壓縮,這裏採用了3G一個壓縮包的方式。如下是壓縮腳本mongodb
#!/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點採起不限速。json
#!/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查看參數,這裏用的是:但願你們能少採坑。
以上就是我傳輸的過程和腳本,但願可以幫助到你們。bash