MySQL帶有視圖數據庫在恢復數據時視圖變成數據表的解決方法

根據公司的業務需求博主將生產線上的數據庫使用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個月以前的數據


至此問題獲得瞭解決。

相關文章
相關標籤/搜索