mysql 快速迁移到历史表(MySQL 线上日志库迁移实例)
mysql 快速迁移到历史表
MySQL 线上日志库迁移实例说说最近的一个案例吧,线上阿里云rds上的一个游戏日志库最近出现了一点问题,随着游戏人数的增加,在线日志库的数据量越来越大,最新的日志库都已经到50g大小了,在线变更的时间非常长。
之前之所以没有发现,是因为之前一直没有进行过日志库的变更,但是随着业务的深入,需要增加一些游戏属性,要对之前的日志库进行变更,这样一来,长时间的维护窗口让业务方和dba都望而却步,日志优化迫在眉睫。
首先看日志库的情况:
1、日志库中数据量大于5000w的大表有5张;
2、这5张表开量前每个月的数据量大概在2000w左右,开量后会更多;
3、有2个表的索引大小已经超过数据文件大小
询问了业务方和运营对这些表的要求,具体如下:
1、保留最近这3个月的数据,其他的数据可以进行流转,避免影响线上业务的性能。
2、3个月之前的数据流转到一个本地库中,可以支持查询即可,查询速度不能过于慢,分钟级别的可以接受。
3、日志库在迁移的过程中,能够容忍几分钟的表数据丢失,对数据的同步实时性要求不是很高
4、线上的日志库需要支持用户活跃度等统计
5、不希望执行分库分表,有很多查询近几个月的sql操作,表之间存在一定的耦合性,分表之后不利于关联操作
基于上面的分析,结合实际情况,初步设想的方案是:
1、对线上数据库game_log中的表进行rename操作,然后将原来的表重新创建出来,这个过程中不是连续的,可能会丢失几秒钟的数据。具体的操作如下:
|
#第一步 rename table game_log. table to game_log_bak. table ; #第二步,获取表结构,其中重要的是auto_increment的值, #保证后续导入三个月内数据的时候不会发生冲突 show create table game_log_bak. table \g #第三步 在game_log库中重新创建第二步的表结构 |
2、将rename过后的game_log_bak库中的数据流转到本地的离线数据库中,该数据库采用infobright存储引擎,这样能够支持离线数据的快速查询
3、备份并清理线上表3个月之外的数据,大概是40g,并将线上的game_log_bak数据库中3个月以内的数据(大概10g)重新灌入game_log数据库中,这样结构就变成了:
4、删除game_log_bak库,并搭建一个只读从库,实时的从主库上同步game_log库的信息,如下:
5、从本地的只读从库中,像本地的infobright数据库中同步数据,同步的方法可以选用datax工具,像下面这样:
6、设置定时任务,按照一定的周期清理线上的过期数据,确保线上只保留最近3个月的数据,不会对rds的磁盘存储空间产生压力。
这个方法中,目前看来存在下面几个问题:
1、经常性的清理线上数据,这些数据占用的表空间不能被立即回收,可能会造成数据表的碎片问题。
2、后续如果游戏的量级上来之后,使用这个问题可能还是会有问题,届时可以适当调整日志表的清理周期,如果数据量过大,可以考虑其他的方案来处理。
回过头来分析,表的设计上还是存在一定的问题,日志表中记录的应该只是流水数据,尽量不能出现关联查询的情况,或者说可以提前评估数据量,然后使用季度表或者月表来处理这种的大量的日志情况,这样在清理和维护的时候可能就方便的多。
以上就是mysql 线上日志库迁移实例的详细内容,更多关于mysql 线上日志库迁移的资料请关注开心学习网其它相关文章!
原文链接:https://cloud.tencent.com/developer/article/1533732
- mysql读写分离怎么做(MySQL读写分离,写完读不到问题如何解决)
- mysql三种查询方式(MySQL查询学习之基础查询操作)
- navicat连接mysql报1045(解决Navicat for MySQL 连接 MySQL 报2005错误的问题)
- mysqlselect语句汇总(MySQL Select语句是如何执行的)
- 怎么运行xampp中的mysql(本地安装了mysql导致xampp的mysql服务启动失败)
- mysqlpxc性能(MySQL之PXC集群搭建的方法步骤)
- mysql如何解决主从延迟(MySQL主从延迟问题解决)
- navicat15.0.28注册码(Navicat for MySQL 11注册码激活码汇总)
- mysql支持存储表情(MySQL如何插入Emoji表情)
- MySQL 使用事件(Events)完成计划任务(MySQL 使用事件Events完成计划任务)
- mysql索引提高效率(MySql如何查看索引并实现优化)
- Mysql中CONCAT、CONCAT_WS字符串拼接函数
- linux系统登录mysql数据库(Linux手动部署远程的mysql数据库的方法详解)
- mysql新增字段并添加备注(mysql添加备注信息的实现)
- mysql数据库丢失怎么办(MySQL 数据丢失排查案例)
- mysql事务级别设置(mysql在项目中怎么选事务隔离级别)
- 虐待儿童是发泄支配欲的愚蠢行为(虐待儿童是发泄支配欲的愚蠢行为)
- 你或许不知道你隐藏的支配欲望(你或许不知道你隐藏的支配欲望)
- 把宽体丰田86卖了,换成7.5代高尔夫GTI玩起姿态与性能并存的改装(把宽体丰田86卖了)
- 大众推出了第五代高尔夫GT(大众推出了第五代高尔夫GT)
- 换代在即,现在是抄底 7.5代 高尔夫的最佳时机吗(换代在即现在是抄底)
- 2020年大众7.5代高尔夫R终结特别版 最后的呐喊(2020年大众7.5代高尔夫R终结特别版)
热门推荐
- dedecms的自由列表管理(dedecms TAG标签列表分页链接优化方法)
- .Net中Immutable(不可变)集合
- cent os7.0 安装mysql(mysql8.0.23 linuxcentos7安装完整超详细教程)
- docker容器重启配置没了(docker修改未启动容器的配置信息操作)
- sql server 货币型例子(sql server把退款总金额拆分到尽量少的多个订单中详解)
- mysql慢日志查询会输出插入语句吗(MySQL三种日志有啥用?如何提高MySQL并发度?)
- linux nginx部署前端项目(nginx部署多前端项目的几种方法)
- 阿里云域名解析地址写什么(阿里云 Linux 服务器内部无法解析域名问题解决方法)
- python设置按钮(Python按钮的响应事件详解)
- mysql索引的类型和方法(MySQL覆盖索引的使用示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9