Linux本地和異地自動備份方案

來源:互聯網
上載者:User

建立指令碼/root/script/backup.sh
# 該指令碼應用於10多台普通的Linux應用伺服器,多年來從未出過差錯。
# Database Backup較為特殊,這裡不包含Database Backup。
# 因為指令碼中含有FTP密碼,所以FTP僅給予寫入權限較為安全,FTP中的老備份的定期刪除任務由FTP伺服器完成。
# 備份加入到自動任務中,每周六23:00執行,並寫入日誌,如下:
# 追加下面語句到/etc/crontab中


# 0 23 * * 6 root /root/script/backup.sh >> /root/script/backup.log 2>&1
#有注釋版:
#!/bin/bash
#=====================================================
#author zhaoyn
#date 2010/12/31
#=====================================================
#參數設定
basedir=/opt/backup #備份存放的目錄
days=15 #備份在本地保留天數
bakfiles="/root/script /etc" #需要備份的目錄或檔案,請不要使用捷徑或萬用字元
ftpip=XXX.XXX.XXX.XXX #異地備份的FTP地址
ftpuser=username #異地備份的FTP使用者名稱
ftppw=password #異地備份的FTP密碼
echo =====================================================
date
cd $basedir
#刪除備份目錄中15天以前備份檔案,不包含子目錄
find -maxdepth 1 -name "*.tgz" -mtime +"$days" -exec rm -f {} ;
for bakfile in $bakfiles
do
file=`basename $bakfile`
#壓縮打包需要備份的目錄,包括許可權,檔案命名包含目前時間
tar -czpf "$file"_$(date +%Y%m%d-%H%M).tgz $bakfile
#大檔案打包前後,緩解磁碟壓力,降低I/O錯誤機率
sleep 10s ;sync;sync
done
#通過FTP上傳當天備份的檔案到異地
ftp -v -n -i $ftpip <<END
user $ftpuser $ftppw
bin
mput *$(date +%Y%m%d)*.tgz
bye
END

#無注釋版:
#!/bin/bash
#=====================================================
#author zhaoyn
#date 2010/12/31
#=====================================================
basedir=/opt/backup
days=15
bakfiles="/root/script /etc"
ftpip=XXX.XXX.XXX.XXX
ftpuser=username
ftppw=password
echo =====================================================
date
cd $basedir
find -maxdepth 1 -name "*.tgz" -mtime +"$days" -exec rm -f {} ;
for bakfile in $bakfiles
do
file=`basename $bakfile`
tar -czpf "$file"_$(date +%Y%m%d-%H%M).tgz $bakfile
sleep 10s ;sync;sync
done
ftp -v -n -i $ftpip <<END
user $ftpuser $ftppw
bin
mput *$(date +%Y%m%d)*.tgz
bye
END


Mysql的備份,如果淩晨可以停止幾分鐘,那麼強烈建議對Mysql執行物理備份,指令碼如下
#!/bin/bash
#History
#=====================================================
#When Who What
#2010/3/24 Zhaoyn Create
#
#=====================================================


basedir=/opt/backup
updir=$basedir/updir
timenow=$(date +%Y%m%d-%H%M)

# 刪除mysql十四天前的資料,注意,這裡僅刪除了mysql的tgz檔案。
rm -f `find $basedir -name "mysql*.tgz" -mtime +14`

# 由於資料庫在有串連的情況下,直接對資料檔案打包是可能出問題的,所以這裡我們在打包前要停用資料庫,這樣直接對資料檔案打包,恢複時只需解壓資料檔案到新環境相應的目錄即可,預設是/var/lib/mysql
# 如果白天也要進行Database Backup,請使用mysqldump命令,進行線上備份。恢複也挺方便的。
/etc/rc.d/init.d/mysqld stop
sleep 5s ;sync;sync
tar -czpf $basedir/mysql.$timenow.tgz /var/lib/mysql
/etc/rc.d/init.d/mysqld start
#=====================================================
附件中的指令檔是有DOS分行符號(CR/LF)的,複製檔案中的內容到SSH用戶端沒有問題,如果直接拷貝檔案到Linux系統中,可先運行下面的命令:
mv *.txt *sh
dos2unix *.sh
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.