清理8組nodes中表的歷史數(shù)據(jù),平均每個(gè)node中的表有1.5億條記錄
清理8組nodes中表的歷史數(shù)據(jù),平均每個(gè)node中的表有1.5億條記錄,需要根據(jù)date_created字段清理8000W數(shù)據(jù)記錄,這個(gè)字段沒(méi)有索引。
環(huán)境介紹
線上磁盤空間不足,truncate了許多能動(dòng)的表,磁盤空間還是占據(jù)了87%,我們的nagios報(bào)警閥值是80%。所以不斷的還會(huì)收到email以及短信報(bào)警。需要根據(jù)時(shí)間字段date_created清理,但是在設(shè)計(jì)之初由于當(dāng)初的開(kāi)發(fā)人員考慮不足所以date_created字段沒(méi)有建立索引。另外這些數(shù)據(jù)可以不用備份,直接刪除掉。
問(wèn)題來(lái)了,這么大記錄量的表,根據(jù)date_created字段刪除記錄,而且還沒(méi)有索引,難度肯定非常大。enl.ibd文件大小29G大小,磁盤剩余空間32G,兩者差距比較小。
[mysql@xxxx-xxx ide]$ ll -h enl.ibd-rw-rw---- 1 mysql mysql 29G Aug 30 07:21 enl.ibd
方案策劃中,大概準(zhǔn)備采用shell命令。
雖然date_created 沒(méi)有索引,但是我們做過(guò)實(shí)驗(yàn)
mysql> select * from enl where date_created < "2013-01-01 00:00:00" limit 1000;......1000 rows in set (0.00 sec)
看來(lái)執(zhí)行效果還不錯(cuò),那再試下delete效果
mysql> delete from enl where date_created < "2013-01-01 00:00:00" limit 1000;Query OK, 1000 row affected (2.00 sec)
看起來(lái)可以每次刪除1000條,寫腳本delete吧
for ((i=0;i<1000000;i++));do mysql -uroot -e 'use iden;delete from enl where date_created < "2013-01-01 00:00:00" limit 1000;';done
等delete操作完成之后,找業(yè)務(wù)低峰期執(zhí)行 alter table enl engine=innodb;來(lái)釋放磁盤空間。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com