美文网首页
大表数据安全删除

大表数据安全删除

作者: little多米 | 来源:发表于2021-04-28 19:37 被阅读0次

背景
有张记录表包含三千多万条历史记录,其中有一半以上数据为0,为0数据在业务上没有意义,其它表关联此表进行统计查询较多,为提高查询效率,故删除此部分无效数据。

方案
因为要删除一千五百多万条数据,直接通过条件进行删除耗时较长,且易导致锁表。因此,需要更精细一点的删除。

步骤
1、筛选记录
首先,根据删除条件筛选需要删除的记录的id
筛选语句:
select id from tablexxx where virtual_flow = 0 and virtual_voice = 0 and flow_date < '2021-04-28 00:00:00'
将筛选出的记录id全部写入文件deleteids

mysql -D kyhl -e "$上面筛选语句" > deleteids

检查一下看有多少条记录

wc -l deleteids
image.png

3、生成sql脚本
写脚本generateSql.sh,根据每个小文件生成删除语句,就是拼接为删除的sql,格式为delete from table where id in (id列表)

如下

sed "s/^/'&/g" $1 | sed "s/$/&',/g" | sed '1,1s/^/delete from tbl_card_day_flow where id in (&/g' | sed '$s/,/)/g'

每行前加'
sed 's/^/'&/g' delete00
每行末加',

sed 's/$/&',/g' delete00

首行前加delete from tbl_card_day_flow where iccid_mark in (
sed '1,1s/^/delete from tbl_card_day_flow where iccid_mark in (&/g' delete00
尾行后替换,为)
sed '$s/,/)/g' delete00

4、执行脚本
写脚本circleDelete.sh,遍历拆分文件目录,执行完一个就删除一个拆分文件

for file in `ls /root/delete`; do
#保存临时sql
        sql1=`sh /root/generateSql.sh $file > /root/tem_delete.sql`
#执行删除
        result=`mysql -D kyhl -e "source /root/tem_delete.sql"`
#结果保存到文件
        echo $result >> /root/tem_delete_result
#删除拆分文件
        rm -f "/root/delete/$file"
#提示
        echo "$file执行成功"
#休眠1秒再进行下次删除
        sleep 1
done
#执行
sh circleDelete.sh
image.png

踩坑:不应该对每个拆分文件删除第一行,只需要对总文件删除第一行即可。

相关文章

  • 大表数据安全删除

    背景有张记录表包含三千多万条历史记录,其中有一半以上数据为0,为0数据在业务上没有意义,其它表关联此表进行统计查询...

  • 《SQL必知必会》—— 操作数据

    插入数据 更新数据 删除数据 创建表 更新表 删除表

  • MySQL:常规操作示例

    删除:DELETE、DROP、TRUNCATE DELETE 删除表内数据。 示例: DROP 删除表,包括表数据...

  • MySQL的SQL_SAFE_UPDATES 设置说明

    鉴于以前出现的数据大表误更新和全表误删除操作。影响服务使用和数据安全。 为了防止线上业务出现以下3种情况影响线上服...

  • Hive02

    外部表创建 外部表与内部表的区别:内部表 删除表 元数据和数据丢失、外部表 删除表 只删除元数据 数据依然存在 L...

  • mongo导出导入

    导出库 删除之前表数据导入库 导出表 删除之前表数据导入表

  • mongodb基本命令

    连接数据库 显示所有数据库 使用数据库 查看表 插入数据 查询表数据 修改表数据 删除表数据 删除表 删除数据库

  • mysql

    新建表 删除表 删除数据 DELETE 用来删除表中的数据DELETE table_name [WHERE{con...

  • Oracle常规操作

    1、创建表 2、备份表 3、删除表 --备注:删除表结构和表数据4、清空表 --备注:清空数据表数据,没有返回余地...

  • SQL基础语句

    SQL 基本语句记录 新建表 删除表: 插入数据: 删除数据: 更新数据: 新增字段: 删除字段: 修改字段: 重...

网友评论

      本文标题:大表数据安全删除

      本文链接:https://www.haomeiwen.com/subject/cpcbrltx.html