Lftp+Sftp傳輸總結


因為備份數據的不斷擴大,需要把現網備份的數據(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查看參數,這里用的是:希望大家少采坑。

希望能夠幫助到大家,有喜歡文字的幫忙點個推薦。
謝謝 您的喜歡是我最大的動力


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM