> 데이터 베이스 > MySQL 튜토리얼 > 清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录_MySQL

清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-01 13:30:24
원래의
1034명이 탐색했습니다.

bitsCN.com

清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录

 

清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。

 

环境介绍 

线上磁盘空间不足,truncate了许多能动的表,磁盘空间还是占据了87%,我们的nagios报警阀值是80%。所以不断的还会收到email以及短信报警。需要根据时间字段date_created清理,但是在设计之初由于当初的开发人员考虑不足所以date_created字段没有建立索引。另外这些数据可以不用备份,直接删除掉。

 

问题来了,这么大记录量的表,根据date_created字段删除记录,而且还没有索引,难度肯定非常大。enl.ibd文件大小29G大小,磁盘剩余空间32G,两者差距比较小。

[mysql@xxxx-xxx ide]$ ll -h enl.ibd-rw-rw---- 1 mysql mysql 29G Aug 30 07:21 enl.ibd
로그인 후 복사

方案策划中,大概准备采用shell命令。

虽然date_created 没有索引,但是我们做过实验

mysql> select * from enl where date_created < "2013-01-01 00:00:00" limit 1000;......1000 rows in set (0.00 sec)
로그인 후 복사

看来执行效果还不错,那再试下delete效果

mysql> delete from enl where date_created < "2013-01-01 00:00:00" limit 1000;Query OK, 1000 row affected (2.00 sec)
로그인 후 복사

看起来可以每次删除1000条,写脚本delete吧

for ((i=0;i<1000000;i++));do mysql -uroot -e &#39;use iden;delete  from enl where date_created < "2013-01-01 00:00:00" limit 1000;&#39;;done
로그인 후 복사

 

 

等delete操作完成之后,找业务低峰期执行 alter table enl  engine=innodb;来释放磁盘空间。
 

bitsCN.com
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿