MySQL表碎片清理
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表碎片清理的更多相关文章
- MySQL表碎片整理
MySQL表碎片整理 1. 计算碎片大小 2. 整理碎片 2.1 使用alter table table_name engine = innodb命令进行整理. 2.2 使用pt-online-sch ...
- 检查mysql表碎片化脚本
#!/bin/sh echo -n "MySQL username: " ; read username echo -n "MySQL password: " ...
- MySQL表的碎片整理和空间回收小结
MySQL表碎片化(Table Fragmentation)的原因 关于MySQL中表碎片化(Table Fragmentation)产生的原因,简单总结一下,MySQL Engine不同,碎片化的原 ...
- Mysql Innodb 表碎片整理
一.为什么会产生碎片 简单的说,删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来.于是造成了数据的存储位置不连续,以及物理存储顺序与理论上的排序顺序不同,这种 ...
- mysql 碎片清理
在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作——MySQL数据表碎片整理. 那么,为什么在使 ...
- Mysql 表分区
是否支持分区:mysql> show variables like '%partition%';+-----------------------+-------+| Variable_name ...
- 浅析MySQL数据碎片的产生(data free)
浅析MySQL数据碎片的产生 2011-03-30 09:28 核子可乐译 51CTO 字号:T | T MySQL列表,包括MyISAM和InnoDB这两种最常见的类型,而根据经验来说,其碎片的产生 ...
- 使用OPTIMIZE TABLE命令来整理表碎片实践
操作环境:ubuntu 14.10 mysql 5.6.25 对含有BLOB或TEXT字段的表,若经常做修改或删除类的操作,需要定期执行OPTIMIZE TABLE命令来整理碎片. 1.creat ...
- MySQL表损坏预防与修复
1. 表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. 3. mysqld 进程在写表时 ...
随机推荐
- Homebrew学习(六)之替换及重置homebrew、Homebred Core、Homebrew cask默认源
替换及重置homebrew默认源 中科大源 替换官方源: // 替换brew.git: cd "$(brew --repo)" git remote set-url origin ...
- css3弹性伸缩布局(一)—————flex布局
CSS3弹性伸缩布局简介 2009年,W3C提出了一种崭新的方案—-Flex布局(即弹性伸缩布局),它可以简便.完整.响应式地实现各种页面布局,包括一直让人很头疼的垂直水平居中也变得很简单地就迎刃而解 ...
- 095、如何创建Swarm集群?(Swarm02)
参考https://www.cnblogs.com/CloudMan6/p/7862254.html 本节我们将创建三节点的swarm集群(操作系统Ubuntu 16.04 ,Docker 版本均 ...
- MyCAT与MySQL导入、导出文件
1. MySQL批量导入-LOAD DATA使用本地客户端连接MySQL数据库,批量导入数据,出现报错:2017-06-07 09:30:45,936 MySqlWrapper::ImportCSVt ...
- python程序超时处理 timeout_decorator
如下两个例子,实现对某个函数的超时处理(其实就是加了一个装饰器timeout): 成功例子: 代码: import time import timeout_decorator @timeout_dec ...
- 使用Python的pandas-datareader包下载雅虎财经股价数据
0 准备工作 首先,使用pip方法安装pandas和pandas-datareader两个功能包. 安装的方法十分简单,以管理员身份运行cmd. 输入以下命令. $ pip install panda ...
- 利用urllib.urlopen向有道翻译发送数据获得翻译结果
from urllib import request,parseimport requests, sys,ssl,json ssl._create_default_https_context = ss ...
- 【POJ2152】Fire
题目大意:给定一棵 N 个节点的无根树,点有点权,边有边权,现需要选出一个点集,满足树上任意一个点到该点集的距离不超过该点的给定值,求选出点集点权的最小值是多少. 题解:可以发现,对于以 i 为根的子 ...
- container_of机制
#include <stdio.h> #include <stdlib.h> /* 计算成员变量首部相对于结构变量首部的偏移量 */ #define offsetof(TYPE ...
- python内存相关以及深浅拷贝讲解
3.9 内存相关 3.9.1 id,查看内存地址 >>> v1 = [11,22,33] >>> v2 = [11,22,33] >>> prin ...