MySQL大表清理

生产环境data库业务表base_data大小:500G,data_free:31G

mysql> SELECT table_schema,table_name,data_free/1024/1024 AS data_free_MB FROM information_schema.tables WHERE engine LIKE 'InnoDB'  AND data_free > 100*1024*1024;

mysql> show create table base_data\G;

*************************** 1. row ***************************

Table: base_data

Create Table: CREATE TABLE `base_data` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`method` varchar(50) NOT NULL COMMENT '区分具体操作',

`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),

KEY `idx_base_data_ct` (`create_time`)

) ENGINE=InnoDB AUTO_INCREMENT=1605027 DEFAULT CHARSET=utf8

根据需求,update_time<='2018-01-01 00:00:00'的数据进行备份并清理该部分数据。通过推算得知,

id列创建主键索引,id<=1372421为需要备份清理的数据。

1:与研发协商,分析base_data表,update_time列可以根据时间进行数据分隔,并且该列建有索引,需要保留数据为2018年1月之后的数据,可以清理的数据为2018年1月之前的数据

2:根据id列、update_time列,逐次清理2018年1月之前的数据,可按照每次对一季度的数据进行整理,先备份,再进行清理

如:备份删除id<30,0000的行

mysqldump -uroot -p data base_data --single-transaction --where="id<300000 and update_time <='2018-01-01 00:00:00'" |gzip > /data/backup/base_data.sql.gz

delete from base_data where id<100000 and update_time <='2017-10-01 00:00:00' limit 1000;

delete from base_data where id<200000 and update_time <='2017-10-01 00:00:00' limit 1000;

delete from base_data where id<300000 and update_time <='2017-10-01 00:00:00' limit 1000;

下面进行base_data表碎片整理

3:记录下当前步骤3中update_time列的时间t1,以及此时的表行数;将表base_data的2018年1月之后到时间t1的数据导出base_data1.dmp

mysql> select max(id) from base_data;

+---------+

| max(id) |

+---------+

| 1614699 |

+---------+

1 row in set (0.00 sec)

mysql> select min(id) from hl_base_data;

+---------+

| min(id) |

+---------+

|  300100 |

+---------+

1 row in set (0.00 sec)

mysql> select count(id) from base_data where id<300000 and update_time <='2018-01-01 00:00:00';

+-----------+

| count(id) |

+-----------+

|         0 |

+-----------+

1 row in set (0.00 sec)

mysqldump -uroot -p data base_data --single-transaction --where="id>=300000 and update_time <='t1'" > /backup/base_data.sql

4:编辑dump文件base_data1.dmp,将base_data改名为base_data_tmp,将其导入到与data库同实例下的test库,此时补充增量数据

mysql> insert into test. base_data_tmp select * from data. base_data where update_time >’t1’;

5:最后

mysql> RENAME TABLE data. base_data to data. base_data_old;

mysql> RENAME TABLE test. base_data_tmp to data. base_data;

实现不停业务,对碎片进行清理。

MySQL表碎片清理的更多相关文章

  1. MySQL表碎片整理

    MySQL表碎片整理 1. 计算碎片大小 2. 整理碎片 2.1 使用alter table table_name engine = innodb命令进行整理. 2.2 使用pt-online-sch ...

  2. 检查mysql表碎片化脚本

    #!/bin/sh echo -n "MySQL username: " ; read username echo -n "MySQL password: " ...

  3. MySQL表的碎片整理和空间回收小结

    MySQL表碎片化(Table Fragmentation)的原因 关于MySQL中表碎片化(Table Fragmentation)产生的原因,简单总结一下,MySQL Engine不同,碎片化的原 ...

  4. Mysql Innodb 表碎片整理

    一.为什么会产生碎片 简单的说,删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来.于是造成了数据的存储位置不连续,以及物理存储顺序与理论上的排序顺序不同,这种 ...

  5. mysql 碎片清理

    在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作——MySQL数据表碎片整理. 那么,为什么在使 ...

  6. Mysql 表分区

    是否支持分区:mysql> show variables like '%partition%';+-----------------------+-------+| Variable_name ...

  7. 浅析MySQL数据碎片的产生(data free)

    浅析MySQL数据碎片的产生 2011-03-30 09:28 核子可乐译 51CTO 字号:T | T MySQL列表,包括MyISAM和InnoDB这两种最常见的类型,而根据经验来说,其碎片的产生 ...

  8. 使用OPTIMIZE TABLE命令来整理表碎片实践

    操作环境:ubuntu 14.10   mysql 5.6.25 对含有BLOB或TEXT字段的表,若经常做修改或删除类的操作,需要定期执行OPTIMIZE TABLE命令来整理碎片. 1.creat ...

  9. MySQL表损坏预防与修复

    1.       表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. 3. mysqld 进程在写表时 ...

随机推荐

  1. sql server 平方根函数SQRT(x)

    --SQRT(x)返回非负数x的二次方根 示例:select  SQRT(9), SQRT(36); 结果:3    6

  2. mysql在docker下运行,出现中文乱码

  3. keepalived的工作原理

    keepalived的工作原理 首先简单介绍一下vrrp协议 vrrp协议 用来实现路由器冗余的协议: Vrrp协议是为了消除在静态缺省路由环境下路由器单点故障引起的网络失效而设计的主备模式的协议,使 ...

  4. PAT Basic 1067 试密码 (20 分)

    当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度不超过 20 的.不包含空格. ...

  5. (转)linux下weblogic12c集群的安装部署

    本文介绍linux下weblogic12c集群的安装部署,版本12c,其他版本操作会有所不同,但其大体操作基本都是一样的 关于weblogic的集群,在此就不多做介绍了,如果有不了解的朋友可以百度搜索 ...

  6. css画心形、三角形的总结

    .heart { width: 10px; height: 10px; /* position: fixed; */ background: #fff; transform: rotate(45deg ...

  7. discuz论坛后台部分设置更改之后,清除了缓存网站前台不更新不生效的解决办法

    discuz论坛后台部分设置更改之后,清除了缓存但网站前台不更新不生效的解决办法 在config/config_global.php  把  $_config['memory']['eaccelera ...

  8. Python中的十大图像处理工具

    转自:微信博客 机器学习研究会订阅号 微信号 功能介绍机器学习研究会由百度七剑客雷鸣先生创办,旨在推动AI的技术发展和产业落地.参与组织北大.清华”AI前沿与产业趋势“公开课,广泛的和高校.企业.创业 ...

  9. java高并发核心要点|系列2|锁的底层实现原理

    上篇文章,我们主要讲了解决多线程之间共享数据的核心问题和解决方案,也讲了锁的简单分类. 那么,这把锁,我们应该怎么去实现呢?如果你是java语言设计者,你又会怎么去设计这个线程锁呢? 直觉告诉我们,我 ...

  10. Java并发编程实战 第13章 显式锁

    接口Lock的实现类: ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock Reentra ...