標籤:shell 指令碼備份
公司有三台sql server資料庫,每天通過sql server計劃任務備份資料到本地,再通過本地上傳到資料服務器上做儲存,如此反覆,有時因為工作忙,忘了上傳,導致資料被替換而沒有備份的現象。
經過對Linux學習,發現這一切都只是小問題,不需要這麼麻煩,如是說幹就幹。
通過查資料,sql server是可以通過遠程方式備份的,如果配置好sql server的遠程備份功能,將資料每天備份到指定的資料存放區伺服器上
將資料備份伺服器從windows 7改裝成centos 6.5
現在問題是sql server每天傳過來的資料庫檔案是相同檔案名稱的,是會將原有備份替換的,這樣就儲存不了多天的資料了,如是我想利用指令碼的方式實現當Database Backup檔案傳過來後,我就在目前的目錄建立一個日期檔案夾,然後將資料庫檔案自動移動到該檔案夾中,這樣下次備份的時候,就不會替換了,如果迴圈
為了防止磁碟空間不足,我在指令碼中加入find,尋找到大於30天的資料就清除,(find ./ -type f -mtime +30 -name "*.bak" | xargs rm -f)只保留30天,因為公司對這資料庫不是很嚴格要求保留多少天,所以我就看磁碟的空間來定
然後通過df -h查看備份磁碟的空間大小,做一個每天的郵件通過,告訴管理員,當天刪除的是哪天的備份,磁碟空間還餘多少。
以下是指令碼實現:
#!/bin/bash
WEEK=`date +%w`
# Disk size chkeck
echo `df -h | awk ‘{print $4}‘| sed -n ‘5p‘| sed -r ‘s#(.*)#Waring /Hddf Avail \1 please chkeck Disk#‘`>/Shell/backup.log
find /Hddf/database/ -maxdepth 1 -mtime +24 -type d ! -name "zabbix" ! -name "db" ! -name "RTX*" -exec rm -rf {} \; &&\
echo `df -h | awk ‘{print $4}‘| sed -n ‘5p‘| sed -r ‘s#(.*)#Waring /Hddf Avail \1 please chkeck Disk#‘`>>/Shell/backup.log
if [ $? -eq 0 ];then
echo "`date +%y%m%d` 刪除成功 `find /Hddf/database/ -maxdepth 1 -mtime +24 -type d ! -name "zabbix" ! -name "db" ! -name "RTX*"`">>/Shell/b
ackup.log
else
echo "`date +%y%m%d` 刪除不成功 ">>/Shell/backup.log
fi
# from email admin
mail -s "databackup" [email protected] </Shell/backup.log
if [ $WEEK -ne 0 ];then
if [ ! -d /Hddf/database/`date +%y%m%d` ];then
mkdir -p /Hddf/database/`date +%y%m%d`
mv /Hddf/database/{*.bak,*.BAK} /Hddf/database/`date +%y%m%d`/
fi
else
echo "今天是星期日 沒有資料備份">> /Shell/mvdata.txt
fi
本文出自 “鐘良的linux技術交流部落格” 部落格,請務必保留此出處http://zhongliang.blog.51cto.com/4507905/1917249
小企業sql server資料備份shell指令碼解決方案