1. 程式人生 > 資料庫 >Python批量刪除mysql中千萬級大量資料的指令碼分享

Python批量刪除mysql中千萬級大量資料的指令碼分享

場景描述

線上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資料的資料請關注我們其它相關文章!