当前位置:首页 > 开发 > 操作系统 > 正文

定时对大数据量的表进行分表对数据备份

发表于: 2012-02-25   作者:酷的飞上天空   来源:转载   浏览:
摘要: 工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单sql语句要等好几分钟。。   分表工具:linux的shell + mysql自身提供的管理命令 原理:使用一个和原表数据结构一样的表,替换原表。   linux shell内容如下: =======================开始 

工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单sql语句要等好几分钟。。

 

分表工具:linux的shell + mysql自身提供的管理命令

原理:使用一个和原表数据结构一样的表,替换原表。

 

linux shell内容如下:

=======================开始 

DATE=`date +%Y%m%d`   #当前日期备份

BACKUP_DIRECTORY="/var/db_backup"  #备份的目录,主要存放备份中需要的临时表

 

DB_USER="root"               #数据库用户

DB_PWD="123456"         #数据库密码

 

WSM_APPENTRYREQLOG_SHELL="$BACKUP_DIRECTORY/db_appentryreqlog_shell.sql"                     #替换表db_appentryreqlog时执行的sql命令文件存放位置

WSM_ADENTRYSHOWRECORD_SHELL="$BACKUP_DIRECTORY/db_adentryshowrecord_shell.sql"      #替换表 db_adentryshowrecord时执行的sql命令文件存放位置

 

WSM_APPENTRYREQLOG_FILE="$BACKUP_DIRECTORY/db_appentryreqlog_nodata.sql"                    #导出表db_appentryreqlog结构时的文件存放位置

WSM_ADENTRYSHOWRECORD_FILE="$BACKUP_DIRECTORY/db_adentryshowrecord_nodata.sql"     #导出表db_adentryshowrecord结构时的文件存放位置

 

rm -f $WSM_APPENTRYREQLOG_FILE                                                                                                   #如果已经存在文件,则删除

rm -f $WSM_ADENTRYSHOWRECORD_FILE                                                                                           #如果已经存在文件,则删除

 

mysqldump -u$DB_USER -p$DB_PWD -d db db_appentryreqlog > $WSM_APPENTRYREQLOG_FILE    #导出表结构

mysqldump -u$DB_USER -p$DB_PWD -d db db_adentryshowrecord > $WSM_ADENTRYSHOWRECORD_FILE  #导出表结构

 

sed -i "s/wsm_appentryreqlog/db_appentryreqlog_new/" $WSM_APPENTRYREQLOG_FILE                         #将导出的表结构中表名称wsm_appentryreqlog替换为临时名称db_appentryreqlog_new

sed -i "s/wsm_adentryshowrecord/db_adentryshowrecord_new/" $WSM_ADENTRYSHOWRECORD_FILE   #同上

 

sed -i 's/AUTO_INCREMENT=[0-9]\+/AUTO_INCREMENT=1/' $WSM_APPENTRYREQLOG_FILE                     #新表结构,ID自增值重置为1

sed -i 's/AUTO_INCREMENT=[0-9]\+/AUTO_INCREMENT=1/' $WSM_ADENTRYSHOWRECORD_FILE

 

sed -i "s/db_appentryreqlog_bak/db_appentryreqlog_$DATE/" $WSM_APPENTRYREQLOG_SHELL                            #将db_appentryreqlog_shell.sql文件中的备份表名称根据日期动态替换

sed -i "s/db_adentryshowrecord_bak/db_adentryshowrecord_$DATE/" $WSM_ADENTRYSHOWRECORD_SHELL      #同上

 

#cat $WSM_APPENTRYREQLOG_FILE

#echo '---------------------------------------------------------------------------------1'

#cat $WSM_ADENTRYSHOWRECORD_FILE

#echo '---------------------------------------------------------------------------------2'

#cat $WSM_APPENTRYREQLOG_SHELL

#echo '---------------------------------------------------------------------------------3'

#cat $WSM_ADENTRYSHOWRECORD_SHELL

#echo '---------------------------------------------------------------------------------4'

 

#以上准备工作完成,开始替换表

mysql -u$DB_USER -p$DB_PWD db < $WSM_APPENTRYREQLOG_FILE      #先把新的表结构导入进去

mysql -u$DB_USER -p$DB_PWD db < $WSM_APPENTRYREQLOG_SHELL  

 

mysql -u$DB_USER -p$DB_PWD db < $WSM_ADENTRYSHOWRECORD_FILE   #执行替换表命令

mysql -u$DB_USER -p$DB_PWD db < $WSM_ADENTRYSHOWRECORD_SHELL

 

#恢复文件db_appentryreqlog_shell.sql和db_adentryshowrecord_shell.sql的内容为修改前

sed -i "s/db_appentryreqlog_$DATE/db_appentryreqlog_bak/" $WSM_APPENTRYREQLOG_SHELL

sed -i "s/db_adentryshowrecord_$DATE/db_adentryshowrecord_bak/" $WSM_ADENTRYSHOWRECORD_SHELL

 

#执行完毕。

=======================结束

 

其中db_appentryreqlog_shell.sq文件的内容为

RENAME TABLE db_appentryreqlog TO db_appentryreqlog_bak,db_appentryreqlog_new TO db_appentryreqlog;

 

db_adentryshowrecord_shell.sql文件的内容为

RENAME TABLE db_adentryshowrecord TO db_adentryshowrecord_bak,db_adentryshowrecord_new TO db_adentryshowrecord;   #先把旧表改名备份,然后把新的表改成旧表的名字

 

 

将shell命令文件 以及db_appentryreqlog_shell.sq和db_adentryshowrecord_shell.sql文件都放置到BACKUP_DIRECTORY="/var/db_backup"目录下

 

然后把shell命令配置到定时任务cron里面,OK了。

 

 

 

 

定时对大数据量的表进行分表对数据备份

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一、随着企业业务的增长,访问量和用户等数据的增加,传统的关系数据库已经不能满足需求 分表分库就
关于分库分表方案详细介绍 http://blog.csdn.net/bluishglc/article/details/7696085 这里就不作详
场景:在测试中,我们经常会用到excel。例如。 在sheet1---sheet8为分表,每个sheet表头有统计case
背景: 10w+用户 每个用户每天会产生有效记录1000条,记录组成=用户ID、时间戳、字段1、字段2、字
随着大数据时代的来临,越来越大的数据量冲击着我们的系统,很多脆弱的系统在数据洪水的猛攻下早已
随着大数据时代的来临,越来越大的数据量冲击着我们的系统,很多脆弱的系统在数据洪水的猛攻下早已
随着大数据时代的来临,越来越大的数据量冲击着我们的系统,很多脆弱的系统在数据洪水的猛攻下早已
总体思路和切入点: 1.在spring数据访问封装层通过动态代理无侵入的扩展代码加入分库分表策略。 (1
前一段时间在仿照百度做一个autocomplete的功能,中间遇到数据库设计的问题,这里分享一下: 简单介
目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三) 关于使用框架还是自主开发以及shar
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号