Python批量删除MySQL千万级数据脚本:避免锁表与卡顿

慢慢来
慢慢来
发布时间:2026-10-14| 5人浏览过
原创

本文介绍使用Python脚本批量删除MySQL中千万级数据的方法。针对线上数据库直接删除可能导致锁表或卡顿的问题,脚本采用分批策略:按天遍历数据,每天分50000条小批次执行DELETE操作,直至该天数据清空。该方法有效降低对线上业务的影响,适用于保留近期数据、清理历史统计表的场景。

场景描述

场景描述

问题分析与解决思路

线上MySQL数据库中有一张表用于存储每日统计结果,日均数据量超过1000万条,这出乎了我们的预期。运维人员反馈磁盘空间已占用200GB,经与运营部门确认,决定仅保留最近3天的数据,其余历史数据需进行清理。面对如此庞大的数据量,如何安全高效地执行删除操作成为关键问题。 由于该数据库为线上生产环境,包含其他重要业务表,直接执行全表删除或大事务删除可能导致锁表,进而影响其他表的读写性能。尝试每次仅删除一天的数据时,系统仍出现严重卡顿。因此,决定编写一个Python脚本,以批量、分批的方式执行删除操作。具体思路如下:

  • 每次仅处理一天的数据;
  • 针对每一天的数据,每次删除50000条记录;
  • 当某一天的数据全部删除完毕后,再开始处理下一天的数据;

Python批量删除脚本实现

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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。