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个月以前的数据


至此问题获得了解决。

相关文章
相关标签/搜索