zoukankan      html  css  js  c++  java
  • 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多倍。

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

  • 相关阅读:
    python 异常类型大全
    HDU6532 Chessboard (最大费用流)
    P2764 最小路径覆盖问题 (最小点覆盖=顶点数-最大匹配)
    P3355 骑士共存问题 (最小割)
    P1251 餐巾计划 (网络流)
    P2765 魔术球问题 (网络流)
    P3381 [模板] 最小费用最大流
    P3376 [模板] 网络最大流
    P3384 [模板] 树链剖分
    BZOJ1009: [HNOI2008]GT考试 (矩阵快速幂 + DP)
  • 原文地址:https://www.cnblogs.com/dannylinux/p/9040854.html
Copyright © 2011-2022 走看看