mysql 清除大数据表单(复制表部分数据到新表)

背景:mysql数据库中有个日志表记录高达800多万,影响了mysql的正常业务访问,现需要清理三个月之前的所有数据,大概600多万(大概13G)

方法一:传统delete from xxx,传统,普通,效率底下,高数据清理容易搞垮数据库。

 

方法二:truncate,这个操作会把表中所有的数据给清除掉。(如果是要清空数据的话这个效率最高)。

 

方法三:间接法。步骤如下:

1.创建t_req_log同结构的新表 t_req_log_new 。

create table  t_req_log_new like t_req_log  或通过原表建表语句创建也行。

 

2.访问人数较少时,停web服务(不然会操作还会写日志到该表中)。

 

3.执行sql将t_req_log表近三个月的数据导入到t_req_log_new新表中。
insert into t_req_log_new
select * from t_req_log where time between '2018-02-01 00:00:00' and NOW();

 

4.同时重命名两张表,间接实现数据删除操作,将 t_req_log_new改为原始表名替换原始表。

RENAME TABLE t_req_log TO t_req_log_old,  t_req_log_new TO  t_req_log;           //注意:改名删表之前一定一定要停服务,不然会导致数据库锁表

 

5.删除旧表 (看情况删不删除)。

drop table t_req_log_old       

 

6.重启服务器,观察日志。

以上操作会比delete删除快n多倍。

 

可间隔一段时间执行一次,也可在数据库中做一个事物,自动每日删除

 

posted @   叮伱格斐呃  阅读(1839)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『mysql 清除大数据表单(复制表部分数据到新表)』
点击右上角即可分享
微信分享提示