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

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

WBOY
Freigeben: 2016-06-01 13:30:24
Original
1000 Leute haben es durchsucht

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
Nach dem Login kopieren

方案策划中,大概准备采用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)
Nach dem Login kopieren

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

mysql> delete from enl where date_created < "2013-01-01 00:00:00" limit 1000;Query OK, 1000 row affected (2.00 sec)
Nach dem Login kopieren

看起来可以每次删除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
Nach dem Login kopieren

 

 

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

bitsCN.com
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage