ourmysql博客中提供了 《大表删除数据的思路》,对于大表依据主键删除的思路是必须的,删除几千万的数据还算是比较简单的,如果你的数据库中的表高达数百亿条记录 ,删除其中的几十亿,就需要考虑可用性的问题了。上述文中的 利用生成的文本方式有些不妥。

方法是利用存储过程,游标,先根据条件获取要删除的主键,然后依据主键删除,考虑到删除50亿条记录耗费将近7天的时间(事后得出),必须后台执行。使用python 工具写一个脚本,可以针对多个服务器进行并行操作。

1 在各个服务器上创建存过!

delimiter //

CREATE  PROCEDURE `proc_del_tab`(in com_num int , in push_time datetime )

begin

declare curid bigint ;

DECLARE rowid bigint ;

declare no_more_departments int ;

declare curs cursor for

select id

from

tab

WHERE

v3 < push_time ;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments = 1;

SET no_more_departments=0;

set rowid = 1 ;

set autocommit = 0 ;

open curs ;

REPEAT

fetch curs into curid ;

delete from tab where id = curid ;

set rowid = rowid + 1 ;

if rowid % com_num = 0

then

commit;

end if ;

UNTIL no_more_departments

END REPEAT;

commit ;

close curs ;

end;

//

delimiter ;

2 部署python 脚本:

#!/usr/bin/env python

from MySQLdb import *

import sys

import threading

import time

import os

def now() :

#return str('2011-01-31 00:00:00')

return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )

def log( strs , logs ) :

f = file( logs , 'a' , 0 )

f.write( now() + ' ' + str(strs) + '\n' )

f.close()

def delining( cur , logs ) :

sql = "SET SQL_LOG_BIN=0"

try :

cur['dsn'].execute( sql )

except Exception , e :

log( 'Set SQL_LOG_BIN OFF' + str(e) , logs )

sql = "call proc_del_tab_yang( 3000 , '%s' )" % ('2011-01-31 00:00:00')

log( 'starting process %s' % ( cur['addr'] ) , logs )

try :

cur['dsn'].execute( sql )

except Exception , e :

log( 'Execute Procedure ' + str(e) , logs )

sql = "SET SQL_LOG_BIN=1"

try :

cur['dsn'].execute( sql )

except Exception , e :

log( 'Set SQL_LOG_BIN ON' + str(e) , logs )

log( 'process %s End' % ( cur['addr'] ) , logs )

def main() :

logs = "/root/yangql/python/del_test_tab.log"

server_list=['10.250.7.110']

luser="yang"

lpasswd="yang"

con = []

for addr in server_list :

cons = None

try :

cons = connect( host = addr , user = luser , passwd = lpasswd , port = 3307 , db = 'newcloudapp' )

except Exception , e :

log( 'On Connect %s ' % ( addr ) + str(e) , logs )

continue

con.append(  { 'dsn':cons , 'addr':addr } )

cur = []

for cons in con :

try :

cur.append( { 'dsn':cons['dsn'].cursor( cursorclass = cursors.DictCursor ) , 'addr':cons['addr'] } )

except Exception , e :

log( 'On Cusros %s ' % ( cons['addr'] ) + str(e)  , logs )

continue

thpool = []

for curs in cur :

th = threading.Thread(target = delining ,args=( curs , logs ) )

thpool.append( th )

for th in thpool :

th.start()

for th in thpool :

threading.Thread.join( th )

while True :

if threading.activeCount() < 2 :

break

else :

time.sleep(1)

continue

for curs in cur :

try :

curs['dsn'].close()

except Exception , e :

log( 'On Close Cusros %s ' % ( curs['addr'] ) + str(e)  , logs )

continue

for cons in con :

try :

cons['dsn'].close()

except Exception , e :

log( 'On Close Connect %s ' % ( str(e)  ) , logs )

continue

if __name__ == '__main__' :

main()

MYSQL删除上亿条的大量数据的具体实现相关推荐

  1. 曾为浮云遮望眼,平沙莽莽黄入天。 终有一缘得一道,拨开云雾见青天! ——论如何快速删除上亿级数据集思路

    曾为浮云遮望眼,平沙莽莽黄入天.终有一缘得一道,拨开云雾见青天!     --论如何快速删除上亿级数据集思路 缘起 多年前就遇到过一个问题,后来在工作中也困扰多年,被多次困扰. 曾经一个环境中一个业务 ...

  2. 上亿级的大数据量,如何高性能实现展示分析?

    上亿级的大数据量,如何高性能实现展示分析? 日常一提数据分析和可视化,就想到这个工具操作要多简单易用,图表要多美多炫,然而总是忽略背后的数据支撑. excel 几十万行数据就卡死崩,谈何数据透视表.可 ...

  3. mysql根据id删除数据库,MYSQL删除表中的指定ID数据

    MYSQL删除表中的指定ID数据 删除A表中的ID 中的开头以B* 的数据库. 复制代码 代码如下: delete FROM A WHERE id like 'B%' 单独删除 A 表中的ID B 复 ...

  4. 程序员出售上亿条个人信息被刑拘

    Java编程精选 点击右侧关注,免费入门到精通! 程序员头条 近日,深圳警方破获一宗侵犯公民个人信息案,缴获非法获取公民信息上亿条. 据新华社报道,9 月 18 日,深圳警方接到举报,称有人在网上非法 ...

  5. 一键发布消息到多个微博的服务器,“搞垮” 微博服务器?每天上亿条用户推送是如何做到的...

    原标题:"搞垮" 微博服务器?每天上亿条用户推送是如何做到的 记者 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 想必国内绝大多数网民都有新浪微博的用户账号.据最 ...

  6. 上亿条个人信息被泄露 源头竟是房产商

    抓获的犯罪嫌疑人 央视网 图 个人信息非法泄露已成社会公害.近日,西安警方就侦破了一起特大侵犯公民个人信息案件,查获的非法售卖个人信息有上亿条次,数量令人震惊. 这些个人信息主要包括陕西省内上千个住宅 ...

  7. mysql导入亿级数据_如何将上亿条大容量数据导入MYSQL

    我有一份数据量达到1,0015,0806条的csv文件,现在需要导入Mysql中. 在我电脑中安装的版本是MYSQL8.0.12,常见的管理工具有: 已知的有三种办法: 1.用图形管理工具Navica ...

  8. Mysql如何快速制造千万级上亿条数据?

    大前提 首先确保当前表中至少有一条数据. 思路 对表中数据进行指数型增加,n的2,3,4,-,x次方的递增. 命令:INSERT INTO 表名(字段1,字段2,-,字段n) SELECT (字段1, ...

  9. Mysql导入导出亿条数据(排坑篇)

    声明:这是我在大学毕业后进入第一家互联网工作学习的内容 背景:公司业务需要给某个活动的支付宝用户发送模板消息 经调查发现,此次活动的用户数量大约2亿,为了模拟生产环境,领导让我把生产库的用户信息(脱敏 ...

最新文章

  1. Android 自定义View之3D骰子旋转
  2. 分析了10万起诈骗案例,大数据告诉你:2018年骗子更狡猾了
  3. 端口镜像 流量过滤_技术盛宴 | 流量可视化之ERSPAN的前世今生
  4. 退回余款退回银行会计分录
  5. Linux 动态库的显示调用
  6. DUBBO 使用问题记录
  7. IE6、7 a链接内图片加滤镜后导致a标签链接失效问题解决
  8. php多图片上传并压缩,PHP 上传图片并压缩方法详解
  9. 【Elasticsearch】使用Elasticsearch实现同段和同句搜索
  10. php 合计,表格怎么合计总数
  11. ERROR 1064 (42000): You have an error in your SQL syntax
  12. chrome插件介绍
  13. 转换到coff期间_转换到 COFF 期间失败: 文件无效或损坏
  14. java全能速查宝典_MATLAB函数全能速查宝典 邓薇等 编著.pdf
  15. Mstar的Monitor方案OSD 菜单制作(三)——添加字符串文字
  16. 如何获取vs code中插件Waka Time的API key
  17. Orcal 用户权限
  18. 每天一刷20200602
  19. Java项目:设备台账管理系统(java+SSM+HTML+JSP+JS+mysql)
  20. html输出转成word(转)

热门文章

  1. 基于51单片机密码锁(修改密码,串口上锁解锁,仿真)
  2. autojs画六边形
  3. JAVA学习笔记(九) —— main函数
  4. MySQL燕十八老师课程笔记:第十一课:子查询
  5. 【10.16】wordpress、discuz、域名重定向、用户认证
  6. 石器时代单机修改服务器名,修改部分石器时代服务器和部分文件所在路径
  7. 火灾报警联网FC18中CAN光端机常见问题解答和使用指导
  8. 图像水印添加工具Watermark Sense for Mac
  9. python代码如何整体格式_PyCharm代码格式调整方法
  10. R语言中的PCA分析与可视化