公司有三台sql server資料庫,每天通過sql server計劃任務備份資料到本地,再通過本地上傳到資料伺服器上做儲存,如此反複,有時因為工作忙,忘了上傳,導緻資料被替換而沒有備份的現象。
經過對Linux學習,發現這一切都隻是小問題,不需要這麼麻煩,如是說幹就幹。
- 通過查資料,sql server是可以通過遠端方式備份的,如果配置好sql server的遠端備份功能,将資料每天備份到指定的資料存儲伺服器上
- 将資料備份伺服器從windows 7改裝成centos 6.5
- 現在問題是sql server每天傳過來的資料庫檔案是相同檔案名的,是會将原有備份替換的,這樣就儲存不了多天的資料了,如是我想利用腳本的方式實作當資料庫備份檔案傳過來後,我就在目前目錄建立一個日期檔案夾,然後将資料庫檔案自動移動到該檔案夾中,這樣下次備份的時候,就不會替換了,如果循環
- 為了防止磁盤空間不足,我在腳本中加入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
轉載于:https://blog.51cto.com/zhongliang/1917249