工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单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数据库性能优化是一个关键的话题,尤其是在处理大数据量和高并发场景时。本篇文章主要探讨了三个核心策略:分表、增量备份和数据还原。 首先,分表是提高数据库性能的有效手段。当单表记录数过于庞大,例如...
随着业务量的增长,单个数据库可能会面临性能瓶颈,这时就需要进行数据库水平扩展,通过分库分表将数据分散到多个数据库或表中。SpringBoot结合MyBatis-Plus或者ShardingSphere等工具,可以实现数据路由和分布式事务...
- **数据备份与归档缺失**:关键数据表缺乏有效的备份归档策略,使得在进行统计分析时面临挑战。 - **统计分析未优化**:缺乏针对统计分析的有效策略,导致系统稳定性下降,并对日常交易、运营以及新业务的开展产生...
为了不影响在线服务的性能,豆瓣选择在本地生成并定时打包压缩日志文件,然后通过单机存储和rsync备份的方式进行管理。对于需要进行深入分析的日志数据,则会导入数据仓库中,利用InfoBright、KDB+等工具进行处理和...
根据时间戳或者日期字段进行分片,可以有效处理随着时间增长的数据量,如按年、月、日进行分片。 4.7 全局序列 MyCat提供了全局序列功能,保证在分布式环境中的ID唯一性,避免主键冲突。 4.8 MyCat 定时脚本 MyCat...
1. **分表的目的**:通过将大数据量的表拆分成较小的表来提高查询效率。 2. **分表方式**: - **水平分表**:按照一定规则将数据行分散到多个物理表中。 - **垂直分表**:将一个表中的列分散到多个物理表中。 3. *...
- 数据量过大时,可能需要考虑分区、分表等技术来提高处理效率。 ### Oracle管理 28. **Oracle日常管理**:包括但不限于监控、备份恢复、性能调优等工作。 - 索引管理:在Oracle中同样需要合理管理索引,以提高...
- 解决单表数据量过大导致的性能瓶颈。 - 便于管理和维护。 3. **实现方式**: - **水平切分**:根据某个字段(如用户ID)将数据分散到不同的表或库中。 - **垂直切分**:根据业务模块的不同将表分布到不同的库...
6. **NoSQL与MySQL选择**:当数据结构不固定,大数据量,对扩展性要求高,或者需要高并发读取时,可以选择NoSQL,如MongoDB。若需要事务处理和复杂查询,MySQL更适合。 7. **性能优化**:常见的性能瓶颈包括查询...
8. **TB级数据存储与访问**:对于大规模数据,可能需要分区、分表或水平/垂直切分来提高访问速度。 9. **事务特征与隔离级别**:事务确保数据的一致性,有四种隔离级别:读未提交、读已提交、可重复读和串行化。 ...
这包括但不限于对可能出现的各种异常情况进行预判并制定相应的应急措施、建立多数据中心备份机制等,以保证在遇到突发情况时能够迅速恢复正常服务。 例如,当某个数据中心发生故障时,可以通过自动切换到备用数据...
近9年Java开发经验,其中3年以上大型系统架构设计经验,以及2年以上的团队管理经验,具有分布式、高并发、高可用、大数据量的系统架构设计以及研发经验,目前正负责注册用户三千万,日活三百多万,日访问量1亿+,...
3. 物理存储优化:使用分区、分表策略,提升大数据量下的查询效率。 五、高可用性与复制 1. 主从复制:讲解复制的工作原理,配置主从复制,处理复制延迟和故障切换。 2. Group Replication:介绍Group Replication...
- **技术领域**:具备分布式、高并发、高可用及大数据量系统的架构设计及研发经验。 - **当前项目规模**:负责一个拥有三千万注册用户、日活跃用户超过三百万、日访问量达到1亿次以上、高峰期并发量达十万级别的社区...
7. **分区与分表**:对于大数据量的表,分区和分表策略可以改善查询性能。理解何时使用范围分区、列表分区、哈希分区等。 8. **备份与恢复**:了解mysqldump工具进行数据库备份,以及如何在数据丢失时恢复。 9. **...
- **背景**:企业级应用对系统的稳定性要求极高。 - **核心要点**: - 实现多活数据中心部署; - 采用熔断降级策略应对突发流量; - 配置冗余资源和服务备份方案。 5. **分布式ID生成** - **背景**:分布式...
- **排他锁/写锁**: 独占锁,只能有一个线程对数据进行写操作。 - **行锁**: 锁住单行记录。 - **表锁**: 锁住整个表。 - **悲观锁**: 认为数据会发生冲突,因此锁定数据。 - **乐观锁**: 认为数据不会发生冲突,...