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}'`"

Lftp+Sftp傳輸總結
壓縮完的結果就是上圖一樣,只是個數較多。
接下來的問題是:現網網絡帶寬有限,如何把這些壓縮包傳回到本地。這裏採用的 早上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查看參數,這裏用的是:希望大家能少採坑。
Lftp+Sftp傳輸總結
以上就是我傳輸的過程和腳本,希望能夠幫助到大家。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章