根據公司的業務需求博主將生產線上的數據庫使用shell腳本天天凌晨1點遠程備份到統計分析服務器並將數據自動導入到統計分析數據庫中。理論上這種思路是可行的並且實現起來沒有什麼技術上的問題。可是腳本部署到這兩臺服務器上後通過測試發現生產線上的視圖表到統計分析服務器上導入後變成了數據庫表,究其緣由是Mysql數據庫在備份時將視圖備份成建表dll了。這樣就會致使這樣的問題業務使用正常,可是卻沒有任何統計分析數據生成,由於視圖變成表之後失去了其原有整合處理數據的功能。mysql
爲此博主採用如下解決方法來解決該問題,具體思路是這樣的,第1、在生產服務器上僅僅導出全部表中的數據;第2、與技術人員協調溝通拿到最新的建表和構建視圖的sql文;第3、在統計分析服務器上編寫一個簡單的shell腳本實現刪庫、建庫、建表、建視圖及導入數據的功能。linux
如下爲主要實現的過程:sql
1、 在生產服務器上部署的腳本以下所示:shell
# version: 1.0 for linux數據庫
# method: 全備份mysql數據bash
# author: fengzhanhai服務器
# history: create program V1.0 20121101 by fengzhanhai測試
# tasks: * 1 * * * /home/db-backup/mysql/mysqlbk.sh >> /dev/null 2>&1部署
#conf---------------------------------------------------------get
UserName='sdmtv'
myPwd='sdtv@13.cm'
DbName=mms_sdmtv
BakDir=/data/tongji/
LogFile=/data/tongji/backdb.log
DATE=`date +%Y%m%d`
DumpFile=data$DATE.sql
FtpServer=10.0.211.12
FtpTargetPath=/root/mon
#main---------------------------------------------------------
echo $(date +"%y-%m-%d %H:%M:%S") backup begin >> $LogFile
cd $BakDir
#備份當天文件
/usr/bin/mysqldump -u$UserName -p$myPwd $DbName -t > $BakDir$DumpFile
echo $(date +"%y-%m-%d %H:%M:%S") Dump Done >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") $GZDumpFile compress done >> $LogFile
#上傳到ftp服務器
ftp -v -n $FtpServer << END
user dbback1 sdsb.cc
bin
#cd $FtpTargetPath
put $DumpFile
bye
END
echo $(date +"%y-%m-%d %H:%M:%S") ftp $GZDumpFile compress done >> $LogFile
rm -f $GZDumpFile
#刪除當前目錄下7天前的文件備份文件
find $BakDir -name "data*" -mtime +7 -exec rm {} \;
echo $(date +"%y-%m-%d %H:%M:%S") delete old file done >> $LogFile
#驗證結果
ls -al $DumpFile >> $LogFile
2、在統計分析服務器上部署腳本以下所示:
#!/bin/bash
#It was created by fengzhanhai on 20121105
#It was used by backup mysql
backdb=/backdata
mytime=`date +'%Y%m%d'`
account=root
pwd=sjtv@12.cc
dbname=mms_sdmtv
#mysqldump -u root -psjtv@12.cc mms_sdmtv -t >$backdb/mms.$mytime.sql
mysql -u $account -p$pwd <
drop database $dbname;
#刪庫
create database $dbname;
#建庫
end
mysql -u $account -p$pwd $dbname<$backdb/alldb.sql >>/dev/null 2>&1
#建表、建視圖
#mysql -u $account -p$pwd $dbname -t<$backdb/data$mytime.sql >>/dev/null 2>&1
mysql -u $account -p$pwd <
use $dbname
source /backdata/data$mytime.sql
#導入數據
feng
find $backdb/ -name 'data*' -ctime +90 | xargs rm -rf {};
#刪除3個月以前的數據
至此問題獲得瞭解決。