Python批量刪除mysql中千萬級大量資料的指令碼分享
阿新 • • 發佈:2020-12-07
場景描述
線上mysql資料庫裡面有張表儲存有每天的統計結果,每天有1千多萬條,這是我們意想不到的,統計結果咋有這麼多。運維找過來,磁碟佔了200G,最後問了運營,可以只保留最近3天的,前面的資料,只能刪了。刪,怎麼刪?
因為這是線上資料庫,裡面存放有很多其它資料表,如果直接刪除這張表的資料,肯定不行,可能會對其它表有影響。嘗試每次只刪除一天的資料,還是卡頓的厲害,沒辦法,寫個Python指令碼批量刪除吧。
具體思路是:
- 每次只刪除一天的資料;
- 刪除一天的資料,每次刪除50000條;
- 一天的資料刪除完,開始刪除下一天的資料;
Python程式碼
# -*-coding:utf-8 -*- import sys # 這是我們內部封裝的Python Module sys.path.append('/var/lib/hadoop-hdfs/scripts/python_module2') import keguang.commons as commons import keguang.timedef as timedef import keguang.sql.mysqlclient as mysql def run(starttime,endtime,regx): tb_name = 'statistic_ad_image_final_count' days = timedef.getDays(starttime,regx) # 遍歷刪除所有天的資料 for day in days: print '%s 資料刪除開始'%(day) mclient = getConn() sql = ''' select 1 from %s where date = '%s' limit 1 '''%(tb_name,day) print sql result = mclient.query(sql) # 如果查詢到了這一天的資料,繼續刪除 while result is not (): sql = 'delete from %s where date = "%s" limit 50000'%(tb_name,day) print sql mclient.execute(sql) sql = ''' select 1 from %s where date = '%s' limit 1 '''%(tb_name,day) print sql result = mclient.query(sql) print '%s 資料刪除完成'%(day) mclient.close() # 返回mysql 連線 def getConn(): return mysql.MysqlClient(host = '0.0.0.0',user = 'test',passwd = 'test',db= 'statistic') if __name__ == '__main__': regx = '%Y-%m-%d' yesday = timedef.getYes(regx,-1) starttime = '2019-08-17' endtime ='2019-08-30' run(starttime,regx)
以上就是Python批量刪除mysql中千萬級大量資料的指令碼的詳細內容,更多關於python 刪除MySQL資料的資料請關注我們其它相關文章!