`
酷的飞上天空
  • 浏览: 521841 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

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

 
阅读更多

工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单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了。

 

 

 

 

分享到:
评论

相关推荐

    Mysql数据库性能优化三(分表、增量备份、还原)

    MySQL数据库性能优化是一个关键的话题,尤其是在处理大数据量和高并发场景时。本篇文章主要探讨了三个核心策略:分表、增量备份和数据还原。 首先,分表是提高数据库性能的有效手段。当单表记录数过于庞大,例如...

    SpringBoot集成常用开发中间件,分库分表,缓存,消息队列,定时器,权限管理等组件

    随着业务量的增长,单个数据库可能会面临性能瓶颈,这时就需要进行数据库水平扩展,通过分库分表将数据分散到多个数据库或表中。SpringBoot结合MyBatis-Plus或者ShardingSphere等工具,可以实现数据路由和分布式事务...

    平台各系统统计分析系统设计方案(机密文件)

    - **数据备份与归档缺失**:关键数据表缺乏有效的备份归档策略,使得在进行统计分析时面临挑战。 - **统计分析未优化**:缺乏针对统计分析的有效策略,导致系统稳定性下降,并对日常交易、运营以及新业务的开展产生...

    豆瓣网海量数据存储架构

    为了不影响在线服务的性能,豆瓣选择在本地生成并定时打包压缩日志文件,然后通过单机存储和rsync备份的方式进行管理。对于需要进行深入分析的日志数据,则会导入数据仓库中,利用InfoBright、KDB+等工具进行处理和...

    分布式mysql邮件解析1

    根据时间戳或者日期字段进行分片,可以有效处理随着时间增长的数据量,如按年、月、日进行分片。 4.7 全局序列 MyCat提供了全局序列功能,保证在分布式环境中的ID唯一性,避免主键冲突。 4.8 MyCat 定时脚本 MyCat...

    mysql优化整理文档

    1. **分表的目的**:通过将大数据量的表拆分成较小的表来提高查询效率。 2. **分表方式**: - **水平分表**:按照一定规则将数据行分散到多个物理表中。 - **垂直分表**:将一个表中的列分散到多个物理表中。 3. *...

    MySQL笔试面试题大全

    - 数据量过大时,可能需要考虑分区、分表等技术来提高处理效率。 ### Oracle管理 28. **Oracle日常管理**:包括但不限于监控、备份恢复、性能调优等工作。 - 索引管理:在Oracle中同样需要合理管理索引,以提高...

    mysql数据库方面笔试面试题(带答案)

    - 解决单表数据量过大导致的性能瓶颈。 - 便于管理和维护。 3. **实现方式**: - **水平切分**:根据某个字段(如用户ID)将数据分散到不同的表或库中。 - **垂直切分**:根据业务模块的不同将表分布到不同的库...

    高级mysql运维工程师面试题20道

    6. **NoSQL与MySQL选择**:当数据结构不固定,大数据量,对扩展性要求高,或者需要高并发读取时,可以选择NoSQL,如MongoDB。若需要事务处理和复杂查询,MySQL更适合。 7. **性能优化**:常见的性能瓶颈包括查询...

    聊聊高并发高可用那些事(Kafka、Redis、MySQL)

    8. **TB级数据存储与访问**:对于大规模数据,可能需要分区、分表或水平/垂直切分来提高访问速度。 9. **事务特征与隔离级别**:事务确保数据的一致性,有四种隔离级别:读未提交、读已提交、可重复读和串行化。 ...

    微信红包的架构设计简介

    这包括但不限于对可能出现的各种异常情况进行预判并制定相应的应急措施、建立多数据中心备份机制等,以保证在遇到突发情况时能够迅速恢复正常服务。 例如,当某个数据中心发生故障时,可以通过自动切换到备用数据...

    Java架构师简历模板(P6、P7).docx

    近9年Java开发经验,其中3年以上大型系统架构设计经验,以及2年以上的团队管理经验,具有分布式、高并发、高可用、大数据量的系统架构设计以及研发经验,目前正负责注册用户三千万,日活三百多万,日访问量1亿+,...

    知数堂MySQL DBA面试秘籍.zip

    3. 物理存储优化:使用分区、分表策略,提升大数据量下的查询效率。 五、高可用性与复制 1. 主从复制:讲解复制的工作原理,配置主从复制,处理复制延迟和故障切换。 2. Group Replication:介绍Group Replication...

    Java资深工程师简历模板 (1).docx

    - **技术领域**:具备分布式、高并发、高可用及大数据量系统的架构设计及研发经验。 - **当前项目规模**:负责一个拥有三千万注册用户、日活跃用户超过三百万、日访问量达到1亿次以上、高峰期并发量达十万级别的社区...

    mysql代码-面试题第三关

    7. **分区与分表**:对于大数据量的表,分区和分表策略可以改善查询性能。理解何时使用范围分区、列表分区、哈希分区等。 8. **备份与恢复**:了解mysqldump工具进行数据库备份,以及如何在数据丢失时恢复。 9. **...

    专题04:架构设计面试题(卷王专供+ 史上最全 + 2023面试必备)-V105-from-尼恩Java面试宝典.pdf

    - **背景**:企业级应用对系统的稳定性要求极高。 - **核心要点**: - 实现多活数据中心部署; - 采用熔断降级策略应对突发流量; - 配置冗余资源和服务备份方案。 5. **分布式ID生成** - **背景**:分布式...

    java中高级面试必备技术

    - **排他锁/写锁**: 独占锁,只能有一个线程对数据进行写操作。 - **行锁**: 锁住单行记录。 - **表锁**: 锁住整个表。 - **悲观锁**: 认为数据会发生冲突,因此锁定数据。 - **乐观锁**: 认为数据不会发生冲突,...

Global site tag (gtag.js) - Google Analytics