当前位置: 首页 > news >正文

安全快速地删除 MySQL 大表数据并释放空间

一、需求

  1. 按业务逻辑删除大量表数据
  2. 操作不卡库,不能影响正常业务操作
  3. 操作不能造成 60 秒以上的复制延迟
  4. 满足以上条件的前提下,尽快删除数据并释放所占空间

        表结构如下:

create table `space_visit_av` (`userid` bigint(20) not null comment '用户id',`avid` bigint(20) not null comment '作品id',`touserid` bigint(20) not null comment '被访问用户d',`createtime` timestamp not null default current_timestamp comment '创建时间',`updatetime` timestamp not null default current_timestamp on update current_timestamp comment '收藏时间',primary key (`userid`,`avid`),key `index_1` (`touserid`,`updatetime`) using btree,key `index_2` (`avid`,`updatetime`) using btree,key `idx_updatetime` (`updatetime`)
) engine=innodb default charset=utf8 comment='用户访问作品表';

        表中现有约 50 亿条数据,只保留 2023-10-01 以后的数据(约占总量的 1/10),其它删除。

二、实现

1. 主库按原表创建删除关联表,只保留原表的主键

mysql -uwxy -p123456 -h10.10.10.1 -P18251 -Dspace -e "
create table del (userid bigint(20) not null comment '用户id',avid bigint(20) not null comment '作品id',primary key (userid,avid));"

2. 导出需要删除数据的主键到文件

-- 在从库执行查询
select userid, avid into outfile '/data/del.txt' from space_visit_av where updatetime < '2023-10-01';

3. 将文件分割成 10 万行一个的小文件

cd /data
split -l 100000 -d -a 6 del.txt# 删除原文件
rm del.txt

4. 遍历文件执行删除

# 后台执行
nohup ~/del.sh > ~/del.log 2>&1 &

        del.sh 脚本文件内容如下:

#!/bin/bash
source ~/.bashrcdir="/data/"
ls $dir | while read line
dofile=${dir}${line}# 表关联删除数据mysql -wxy -p123456 -h10.10.10.1 -P18251 -Dspace --local-infile -e "delete from del;load data local infile '$file' into table del;analyze table del; analyze table space_visit_av;delete t1 from space_visit_av t1, del t2 where t1.userid=t2.userid and t1.avid=t2.avid;" -vvvecho ${line}# 取得所有从库的延迟秒数s1=`mysql -wxy -p123456 -h10.10.10.2 -P18251 -e "show slave status\G" 2>/dev/null | egrep 'Seconds_Behind_Master' | awk -F": " '{print $2}'`s2=`mysql -wxy -p123456 -h10.10.10.3 -P18251 -e "show slave status\G" 2>/dev/null | egrep 'Seconds_Behind_Master' | awk -F": " '{print $2}'`s3=`mysql -wxy -p123456 -h10.10.10.4 -P18251 -e "show slave status\G" 2>/dev/null | egrep 'Seconds_Behind_Master' | awk -F": " '{print $2}'`# 只有所有从库延迟小于等于 1 秒时继续执行删除,否则等待从库追赶while ((s1 > 1)) || ((s2 > 1)) || ((s3 > 1))dosleep 1;s1=`mysql -wxy -p123456 -h10.10.10.2 -P18251 -e "show slave status\G" 2>/dev/null | egrep 'Seconds_Behind_Master' | awk -F": " '{print $2}'`s2=`mysql -wxy -p123456 -h10.10.10.3 -P18251 -e "show slave status\G" 2>/dev/null | egrep 'Seconds_Behind_Master' | awk -F": " '{print $2}'`s3=`mysql -wxy -p123456 -h10.10.10.4 -P18251 -e "show slave status\G" 2>/dev/null | egrep 'Seconds_Behind_Master' | awk -F": " '{print $2}'`echo "$s1 $s2 $s3"donedone# 删除完成后,分析原表,删除关联表
mysql -wxy -p123456 -h10.10.10.1 -P18251 -Dspace -e "analyze table space_visit_av;drop table del;"

5. 所有从库分析表

mysql -wxy -p123456 -h10.10.10.2 -P18251 -Dspace -e "analyze table space_visit_av;"
mysql -wxy -p123456 -h10.10.10.3 -P18251 -Dspace -e "analyze table space_visit_av;"
mysql -wxy -p123456 -h10.10.10.4 -P18251 -Dspace -e "analyze table space_visit_av;"

6. 使用 pt-online-schema-change 释放删除数据所占空间

# 后台执行
nohup ~/shrink.sh > ~/shrink.log 2>&1 &

        shrink.sh 脚本文件内容如下:

#!/bin/bash
source ~/.bashrc# 连接主库执行
pt-online-schema-change \
--host="10.10.10.1" \
--port=18251 \
--user="wxy" \
--password="123456" \
--charset="utf8mb4" \
--chunk-size=10000 \
--recursion-method="processlist" \
--check-interval=5s \
--max-lag=30s \
--nocheck-replication-filters \
--critical-load="Threads_running=512" \
--max-load="Threads_running=256" \
D="space",t="space_visit_av" \
--progress=time,30 \
--execute

相关文章:

安全快速地删除 MySQL 大表数据并释放空间

一、需求 按业务逻辑删除大量表数据操作不卡库&#xff0c;不能影响正常业务操作操作不能造成 60 秒以上的复制延迟满足以上条件的前提下&#xff0c;尽快删除数据并释放所占空间 表结构如下&#xff1a; create table space_visit_av (userid bigint(20) not null comment 用…...

未使用 “严格模式“(js的问题)

"严格模式"&#xff08;即在JavaScript源文件的开头包括 "use strict"&#xff1b;&#xff09;是一种自愿在运行时对JavaScript代码执行更严格的解析和错误处理的方式&#xff0c;同时也使它更安全。 但是&#xff0c;不使用严格模式本身并不是一个 &quo…...

Verilog基础:$random系统函数的使用

相关阅读 Verilog基础​编辑https://blog.csdn.net/weixin_45791458/category_12263729.html $random系统函数语法的BNF范式如下所示&#xff0c;有关BNF范式相关内容&#xff0c;可以浏览以往文章Verilog基础&#xff1a;巴科斯范式(BNF)。 $random系统函数在每次调用时返回一…...

数据库Delete的多种用法

数据库的Delete操作是用来删除数据库中的数据记录的&#xff0c;它是数据库操作中的一种重要操作&#xff0c;能够帮助用户删除不需要的数据&#xff0c;以便保持数据库的整洁和高效。在使用Delete操作时&#xff0c;需要注意确保操作的准确性和安全性&#xff0c;以免误删重要…...

鸿蒙前端开发-构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Serv…...

从零开始搭建链上dex自动化价差套利程序(12)

其他品种 扩展到其他币种的价差套利 1.eth 新建文件get_depth_data_eth.py import asyncio from apexpro.http_public import HttpPublic from dydx3 import Client from dydx3.constants import MARKET_ETH_USD# 定义交易对列表 symbol ETHUSDC market MARKET_ETH_USD# …...

MySQL 数据库如何实现 XA 规范?

本文我们来讨论 MySQL 的 XA 规范有哪些应用相关的内容。 MySQL 为我们提供了分布式事务解决方案&#xff0c;在前面的内容中提到过 binlog 的同步&#xff0c;其实是 MySQL XA 规范的一个应用&#xff0c;那么 XA 规范是如何定义的&#xff0c;具体又是如何应用的呢&#xff…...

SVN修改已提交版本的日志方法

1.在工做中一直是使用svn进行項目的版本控制的&#xff0c;有时候因为提交匆忙&#xff0c;或是忘了添加Log&#xff0c;或是Log内容有错误。遇到此类状况&#xff0c;想要在查看项目的日志时添加log或是修改log内容&#xff0c;遇到以下错误&#xff1a; Repository has not b…...

ArkUI组件--Text组件

1.声明Text组件并设置文本内容 Text(content?:string|Recource) #两种数据类型&#xff0c;字符串和本地资源文件 ①string格式&#xff0c;直接填写文本内容 Text(需要显示的文本) ②Recource格式&#xff0c;读取本地资源文件 Text($r(app.string.width_label)) 读取图…...

mysql的组合查询

mysql的组合查询 1、mysql的内连接查询 在 MySQL 中&#xff0c;内连接&#xff08;INNER JOIN&#xff09;是一种根据两个或多个表之间的匹配条件&#xff0c;将多个表中的数据进行联接的操作。内连接只返回符合联接条件的行&#xff0c;而不会返回未匹配的行。 内连接的语…...

短视频购物系统源码:构建创新购物体验的技术深度解析

短视频购物系统作为电商领域的新宠&#xff0c;其背后的源码实现是其成功的关键。本文将深入探讨短视频购物系统的核心技术和源码设计&#xff0c;以揭示其如何构建创新购物体验的技术奥秘。 1. 技术架构与框架选择 短视频购物系统的源码首先考虑的是其技术架构。常见的选择…...

暴力破解漏洞

暴力破解漏洞 1.1 漏洞简介1.2 漏洞影响范围1.3 漏洞详解1.3.1DVWA(1)LOW(2)Medium(3)HIGH 1.3.2 Pikachu(1)验证码绕过(on server)(2)验证码绕过(on client) 1.3.3 识别验证码&#xff08;绕过&#xff09;1.3.4 密码加密的情况 1.1 漏洞简介 暴力破解是一攻击具手段&#xf…...

前端成神之路-CSS基础选择器

前端成神之路-CSS基础选择器 目录 前端成神之路-CSS基础选择器 CSS选择器&#xff08;重点&#xff09; 1. CSS选择器作用&#xff08;重点&#xff09; 选择器的作用 2. CSS基础选择器 2.1 标签选择器 2.2 类选择器 2.3 类选择器特殊用法- 多类名 2.4 id选择器 id选…...

Endnote在word中加入参考文献及自定义参考文献格式方式

第一部分&#xff1a;在word中增加引用步骤 1、先下载对应文献的endnote引用格式&#xff0c;如在谷歌学术中的下载格式如下&#xff1a; 2、在endnote中打开存储env的格式库&#xff0c;导入对应下载的文件格式&#xff1a;file>import>file>choose,import对应文件&a…...

LeetCode力扣每日一题(Java):28、找出字符串中第一个匹配项的下标

别问我为什么今天做了两题&#xff0c;问就是我干概率论干废了&#xff0c;需要换换脑子想想不同类型的问题&#xff0c;所以来刷刷算法 一、题目 二、解题思路 1、我的思路 其实这题思路还挺简单的&#xff0c;我直接把代码放这&#xff0c;大家应该稍微看看就能懂 char[]…...

Java UDP 多人聊天室简易版

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…...

leetcode 100.相同的树

涉及到递归&#xff0c;最好多画图理解&#xff0c;希望对你们有帮助 100.相同的树 题目 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 题目链接…...

2021年第十届数学建模国际赛小美赛A题气道阻力的评估解题全过程文档及程序

2021年第十届数学建模国际赛小美赛 A题 气道阻力的评估 原题再现&#xff1a; 气道阻力的定义是通过肺气道产生单位气流所需的经肺压力的变化。更简单地说&#xff0c;它是嘴和肺泡之间的压力差&#xff0c;除以气流。影响气道阻力的因素是多方面的&#xff0c;我们需要探讨这…...

内网环境安装K8S1.20.11版本集群

目录 第一章.实验要求和环境 1.1.实验要求 1.2.实验环境 1.3.依赖关系处理 第二章.K8S的安装过程 2.1.初始化到集群安装成功 ------------------------------ 环境准备 ------------------------------ docker安装好了后 2.2.安装K8组件 -------------------- 部署K8…...

【前端设计模式】之策略模式

概述 在前端开发中&#xff0c;我们经常会遇到需要根据不同的条件或情况来执行不同的算法或行为的情况。这时&#xff0c;策略模式就能派上用场。策略模式是一种行为型设计模式&#xff0c;它将不同的算法封装成独立的策略对象&#xff0c;使得这些算法可以互相替换&#xff0…...

酶联免疫斑点技术原理与应用

一、技术背景与基本概念酶联免疫斑点技术Elispot是一种基于单细胞水平检测特异性抗体分泌细胞或细胞因子分泌细胞的免疫学检测方法。该技术结合了酶联免疫吸附测定&#xff08;ELISA&#xff09;的高灵敏度与斑点形成单元的可视化计数优势&#xff0c;能够在单个细胞层面实现功…...

2026年AI风口已至!月薪3万+岗位盘点+零基础转行指南,速收藏!

本文详细介绍了2026年转行AI的优势与机遇&#xff0c;指出行业人才缺口巨大且薪资水平高。文章全面梳理了AI行业的各类岗位&#xff0c;并针对技术、产品、运营、培训等不同转行路径&#xff0c;提供了分阶段的学习指南和推荐资源。此外&#xff0c;还针对应届毕业生、传统行业…...

青蓝送水模式小程序开发指南

核心功能模块设计编辑: 三匠互联土土哥用户端功能在线订水&#xff1a;支持选择水桶规格&#xff08;如18L、12L&#xff09;、品牌&#xff08;农夫山泉、怡宝等&#xff09;及配送时间。订单跟踪&#xff1a;实时显示配送状态&#xff08;接单、配送中、已完成&#xff09;&a…...

Ubuntu 24.04 主机名修改全攻略:从基础到自动化脚本

1. 主机名修改基础&#xff1a;为什么需要关注这个小细节&#xff1f; 刚接触Ubuntu系统的朋友可能会好奇&#xff1a;主机名不就是个名字吗&#xff1f;为什么需要专门写篇文章来讲修改方法&#xff1f;我刚开始用Linux时也这么想过&#xff0c;直到有次在局域网里找了半小时的…...

如何在5分钟内快速上手Wade搜索库:终极快速入门指南

如何在5分钟内快速上手Wade搜索库&#xff1a;终极快速入门指南 【免费下载链接】wade :ocean: Blazing fast 1kb search library 项目地址: https://gitcode.com/gh_mirrors/wa/wade Wade是一个轻量级、高性能的JavaScript搜索库&#xff0c;仅1kb大小却提供了强大的全…...

像素剧本圣殿效果展示:生成含镜头切换提示与音效标注的专业脚本

像素剧本圣殿效果展示&#xff1a;生成含镜头切换提示与音效标注的专业脚本 1. 专业剧本创作新体验 在影视创作领域&#xff0c;剧本质量直接影响最终作品的表现力。传统剧本创作往往需要编剧反复推敲场景转换、镜头语言和音效设计&#xff0c;这个过程既耗时又需要丰富的专业…...

深度解析:利用pmap+gdb精准诊断Linux进程内存异常

1. 为什么需要pmapgdb组合排查内存问题 第一次遇到线上服务内存爆涨时&#xff0c;我盯着top命令里那个不断攀升的RES数值束手无策。传统的内存监控工具就像医院的体温计&#xff0c;只能告诉你"发烧了"&#xff0c;但查不出具体病因。这就是pmap和gdb这对"黄金…...

Java Web 入门学习笔记:Servlet 请求响应与登录功能实战

一、开篇&#xff1a;今日学习核心与目标学习背景&#xff1a;Java Web 入门阶段核心 ——Servlet 与 HTTP 请求响应交互学习目标&#xff1a;掌握 HttpServletRequest/HttpServletResponse 核心用法实现「登录表单提交→Servlet 验证→页面重定向」完整流程解决实操中 404、中…...

【原创改进代码】面向绿证-碳交易的综合能源系统鲁棒优化方法附Python代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

2025届毕业生推荐的AI论文方案推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 身为前沿那种 AI 工具的 DeepSeek&#xff0c;能够明显提高学术论文写作的效率。于文献综述这…...