zoukankan      html  css  js  c++  java
  • mysql释放大表空间的正确之道

    ###################################

    问题出现背景:

            

    falcon监控集群,一是由于长期大量的写数据,二是业务用来清理过期数据的定时任务异常而停止了,导致数据量持续增长,直到达到了报警阈值

    当前现状:单表的ibd文件大小为2.1T,磁盘空间总共才2.6T

    [work@xxx ]$ ll -h
    total 2.1T
    -rw-r----- 1 work work   67 Jun  8 11:54 db.opt
    -rw-r----- 1 work work 8.8K Jun  8 11:54 endpoint_counter.frm
    -rw-r----- 1 work work 2.1T Jun 18 11:52 endpoint_counter.ibd

    解决过程:

    1,删除部分binlog:purge binary logs to 'mysql-bin.001174';
    
    2,将binlog的自动保存天数从7天改为3天:set global expire_logs_days=3;
    
    3,申请3.6T的大磁盘机器,将该集群的机器逐渐替换掉,最后切主
    
    4,写一个删除数据的shell脚本:每2秒删除1.5万行数据的速度
    
    5,当数据删除完毕后,将其中一台的机器的流量去掉,执行stop slave;然后再执行 alter table xxx engine=innodb;将空间释放出来,注意:不要用optimize table 方式来释放空间,我连续两次都失败了,搞了一半后就卡住了,不知为何
    
    6,再用xtrabakcup备份释放空间了的机器上的mysql,逐渐替换掉,最后切主

    解决问题后:从原来的2.1T变为了444G,释放了1.6T数据

    [work@xxx ]$ ll -h
    total 444G
    -rw-r----- 1 work work   67 Jun  8 11:54 db.opt
    -rw-r----- 1 work work 8.8K Jun 17 14:44 endpoint_counter.frm
    -rw-r----- 1 work work 444G Jun 18 11:52 endpoint_counter.ibd

    ##################################

    igoodful@qq.com
  • 相关阅读:
    人生,时间煮雨,岁月缝花
    Nginx入门到实践---nginx中间件
    CentOS 8 系统安装 Oracle 19c 数据库
    centos8 下安装Oracle jdk8(免安装版)
    Mysql忘记密码
    这个病秋季高发!调理不当最伤孩子体质,记得收好这2个方
    redis client-output-buffer-limit 设置
    redis主从同步收到以下参数影响
    linux:永久打开core文件功能
    linux:core文件的产生和调试
  • 原文地址:https://www.cnblogs.com/igoodful/p/14899355.html
Copyright © 2011-2022 走看看