Python批量刪除mysql中千萬(wàn)級(jí)大量數(shù)據(jù)的腳本分享
場(chǎng)景描述
線上mysql數(shù)據(jù)庫(kù)里面有張表保存有每天的統(tǒng)計(jì)結(jié)果,每天有1千多萬(wàn)條,這是我們意想不到的,統(tǒng)計(jì)結(jié)果咋有這么多。運(yùn)維找過(guò)來(lái),磁盤(pán)占了200G,最后問(wèn)了運(yùn)營(yíng),可以只保留最近3天的,前面的數(shù)據(jù),只能刪了。刪,怎么刪?
因?yàn)檫@是線上數(shù)據(jù)庫(kù),里面存放有很多其它數(shù)據(jù)表,如果直接刪除這張表的數(shù)據(jù),肯定不行,可能會(huì)對(duì)其它表有影響。嘗試每次只刪除一天的數(shù)據(jù),還是卡頓的厲害,沒(méi)辦法,寫(xiě)個(gè)Python腳本批量刪除吧。
具體思路是:
- 每次只刪除一天的數(shù)據(jù);
- 刪除一天的數(shù)據(jù),每次刪除50000條;
- 一天的數(shù)據(jù)刪除完,開(kāi)始刪除下一天的數(shù)據(jù);
Python代碼
# -*-coding:utf-8 -*-
import sys
# 這是我們內(nèi)部封裝的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)
# 遍歷刪除所有天的數(shù)據(jù)
for day in days:
print '%s 數(shù)據(jù)刪除開(kāi)始'%(day)
mclient = getConn()
sql = '''
select 1 from %s where date = '%s' limit 1
'''%(tb_name, day)
print sql
result = mclient.query(sql)
# 如果查詢(xún)到了這一天的數(shù)據(jù),繼續(xù)刪除
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 數(shù)據(jù)刪除完成'%(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中千萬(wàn)級(jí)大量數(shù)據(jù)的腳本的詳細(xì)內(nèi)容,更多關(guān)于python 刪除MySQL數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- MyBatis批量插入/修改/刪除MySql數(shù)據(jù)
- mysql利用mysqlbinlog命令恢復(fù)誤刪除數(shù)據(jù)的實(shí)現(xiàn)
- mysql5.7.33誤刪除ibdata文件找回?cái)?shù)據(jù)的方法
- mysql數(shù)據(jù)庫(kù)刪除重復(fù)數(shù)據(jù)只保留一條方法實(shí)例
- mysql 大表批量刪除大量數(shù)據(jù)的實(shí)現(xiàn)方法
- 淺談為什么MySQL不建議delete刪除數(shù)據(jù)
- Mysql刪除數(shù)據(jù)以及數(shù)據(jù)表的方法實(shí)例
- MySQL刪除數(shù)據(jù),表文件大小依然沒(méi)變的原因
- MySQL 快速刪除大量數(shù)據(jù)(千萬(wàn)級(jí)別)的幾種實(shí)踐方案詳解
- MySQL Delete 刪數(shù)據(jù)后磁盤(pán)空間未釋放的原因
相關(guān)文章
Python數(shù)據(jù)結(jié)構(gòu)之雙向鏈表的定義與使用方法示例
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)之雙向鏈表的定義與使用方法,結(jié)合實(shí)例形式分析了Python雙向鏈表的概念、原理、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-01-01
Jinja2實(shí)現(xiàn)模板渲染與訪問(wèn)對(duì)象屬性流程詳解
要了解jinja2,那么需要先理解模板的概念。模板在Python的web開(kāi)發(fā)中廣泛使用,它能夠有效的將業(yè)務(wù)邏輯和頁(yè)面邏輯分開(kāi),使代碼可讀性增強(qiáng),并且更加容易理解和維護(hù)。模板簡(jiǎn)單來(lái)說(shuō)就是一個(gè)其中包含占位變量表示動(dòng)態(tài)部分的文,模板文件在經(jīng)過(guò)動(dòng)態(tài)賦值后,返回給用戶(hù)2023-03-03
python函數(shù)與方法的區(qū)別總結(jié)
在本篇文章里小編給大家整理了關(guān)于python函數(shù)與方法的區(qū)別的相關(guān)知識(shí)點(diǎn)代碼內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-06-06
python進(jìn)程管理工具supervisor的安裝與使用教程
supervisor是用python寫(xiě)的一個(gè)進(jìn)程管理工具,用來(lái)啟動(dòng),重啟,關(guān)閉進(jìn)程。下面這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)的進(jìn)程管理工具supervisor的安裝與使用的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-09-09
python畫(huà)圖--輸出指定像素點(diǎn)的顏色值方法
今天小編就為大家分享一篇python畫(huà)圖--輸出指定像素點(diǎn)的顏色值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07

