Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5556517
  • 博文数量: 348
  • 博客积分: 2173
  • 博客等级: 上尉
  • 技术积分: 7900
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-24 17:26
个人简介

雄关漫道真如铁,而今迈步从头越。

文章存档

2022年(4)

2020年(6)

2019年(2)

2018年(2)

2017年(34)

2016年(49)

2015年(53)

2014年(47)

2013年(72)

2012年(79)

分类: Mysql/postgreSQL

2012-11-13 09:34:14

根据公司的业务需求博主将生产线上的数据库使用shell脚本每天凌晨1点远程备份到统计分析服务器并将数据自动导入到统计分析数据库中。理论上这种思路是可行的而且实现起来没有什么技术上的问题。但是脚本部署到这两台服务器上后经过测试发现生产线上的视图表到统计分析服务器上导入后变成了数据库表,究其原因是Mysql数据库在备份时将视图备份成建表dll了。这样就会导致这样的问题业务使用正常,但是却没有任何统计分析数据生成,因为视图变成表以后失去了其原有整合处理数据的功能。

为此博主采用以下解决方法来解决该问题,具体思路是这样的,第一、在生产服务器上仅仅导出所有表中的数据;第二、与技术人员协调沟通拿到最新的建表和构建视图的sql文;第三、在统计分析服务器上编写一个简单的shell脚本实现删库、建库、建表、建视图及导入数据的功能。

以下为主要实现的过程:

一、     在生产服务器上部署的脚本如下所示:

# version:      1.0 for linux

# method:       全备份mysql数据

# author:       fengzhanhai

# history:      create program V1.0 20121101 by fengzhanhai

# tasks: * 1 * * * /home/db-backup/mysql/mysqlbk.sh >> /dev/null 2>&1

#conf---------------------------------------------------------

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

二、在统计分析服务器上部署脚本如下所示:

#!/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个月之前的数据

至此问题得到了解决。

阅读(6402) | 评论(10) | 转发(0) |
给主人留下些什么吧!~~

fengzhanhai2012-12-10 08:39:24

ning_lianjie: 我在MySQL5.5上面做了测试,SQL文件有如下信息:
--
-- Temporary table structure for view `v_user`
--

DROP TABLE IF EXISTS `v_user`;
/*!50001 DROP VIEW I.....
没有啊,如果你备份的库有视图当你做备份时会变成建表的dll所以当你再次恢复数据时视图变成表了。

ning_lianjie2012-12-09 20:52:50

我在MySQL5.5上面做了测试,SQL文件有如下信息:
--
-- Temporary table structure for view `v_user`
--

DROP TABLE IF EXISTS `v_user`;
/*!50001 DROP VIEW IF EXISTS `v_user`*/;

请问你在5.1下面,查看SQL文件,有没有与视图相关的信息?

fengzhanhai2012-12-07 09:33:31

fengzhanhai2012-12-07 09:33:25

ning_lianjie: "但是脚本部署到这两台服务器上后经过测试发现生产线上的视图表到统计分析服务器上导入后变成了数据库表,究其原因是Mysql数据库在备份时将视图备份成建表.....
mysql5.1

ning_lianjie2012-12-07 09:31:59

"但是脚本部署到这两台服务器上后经过测试发现生产线上的视图表到统计分析服务器上导入后变成了数据库表,究其原因是Mysql数据库在备份时将视图备份成建表dll了。"

请问博主使用的MySQL版本是什么?