• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mysql数据库如何实现亿级数据快速清理

    今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下:

    1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小

    看到了吗,光olderdb就占了25G

    2. 用SQLyog登录mysql数据库,查看数据库各个表的占用空间情况

    SELECT CONCAT(table_schema,'.',table_name) AS 'aaa',  
      table_rows AS 'Number of Rows',  
      CONCAT(ROUND(data_length/(1024*1024*1024),6),' G') AS 'Data Size',  
      CONCAT(ROUND(index_length/(1024*1024*1024),6),' G') AS 'Index Size' ,  
      CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),6),' G') AS'Total' 
    FROM information_schema.TABLES  
    WHERE table_schema LIKE 'olderdb'; 

    3. 查询主键索引

    SHOW INDEX FROM orbit 

    采取策略

    前提:目前需要删除80%的数据

    ① delete语句

    我们知道delete语句的删除速度与索引量成正比,此表中的索引量已经很大了,而且数据量非常之巨大,若采用常规delete语句删除,必定会话费几天的时间。

    Delete语句删除不会释放出磁盘空间,所以肯定还是会出现报警,所以此种方式不可取。

    ② drop掉表

    新建结构相同的表,命名“cc”,'将需要保存的数据插入到此表中,然后drop掉老表。

    Sql语句如下:

    基于老表新建新表

    CREATE TABLE cc LIKE orbit ;

    插入数据(几百万的数据量一定要分批插入,一次30万-40万为最佳,毕竟mysql的数据处理能力有限)

    按日期查询后插入(每天大概会产生30多万数据量,所以采用日期插入)

    INSERT INTO cc SELECT * FROM orbit WHERE xttime > '2018-04-16 00:00:00' AND xttime='2018-04-17 00:00:00';

    结果如下:

    可以看到50多万的数据量用了不到5分钟,还是比较快的。

    清理后数据表空间得以释放

    然后drop掉老表

    DROP TABLE orbit

    目测只用了3秒左右

    重命名新表“cc”

    ALTER TABLE cc RENAME TO orbit

    总结

    以上所述是小编给大家介绍的mysql数据库如何实现亿级数据快速清理 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • 浅谈MySQL 亿级数据分页的优化
    • 如何使用分区处理MySQL的亿级数据优化
    上一篇:MySQL存储表情时报错:java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’的解决方法
    下一篇:详解Mysql中日期比较大小的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql数据库如何实现亿级数据快速清理 mysql,数据库,如何,实现,