Python批量删除mysql中千万级大量数据的脚本分享


Posted in Python onDecember 03, 2020

场景描述

线上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,endtime,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, endtime, regx)

以上就是Python批量删除mysql中千万级大量数据的脚本的详细内容,更多关于python 删除MySQL数据的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python 排列组合之itertools
Mar 20 Python
python写日志封装类实例
Jun 28 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
pandas 如何分割字符的实现方法
Jul 29 Python
python enumerate内置函数用法总结
Jan 07 Python
python入门之基础语法学习笔记
Feb 08 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
Python tkinter实现日期选择器
Feb 22 Python
python中subplot大小的设置步骤
Jun 28 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 #Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 #Python
python 调整图片亮度的示例
Dec 03 #Python
Python 实现PS滤镜的旋涡特效
Dec 03 #Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 #Python
python字符串拼接+和join的区别详解
Dec 03 #Python
python二维图制作的实例代码
Dec 03 #Python
You might like
PHP+DBM的同学录程序(2)
2006/10/09 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
JS查看对象功能代码
2008/04/25 Javascript
JavaScript 应用类库代码
2008/06/02 Javascript
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
javascript this详细介绍
2016/09/19 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
安全生产活动月方案
2014/03/09 职场文书
《称象》教学反思
2014/04/25 职场文书
监督检查工作方案
2014/05/28 职场文书
年度评优评先方案
2014/06/03 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
2014年租房协议书范本
2014/10/30 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
Python 文字识别
2022/05/11 Python