【mysql篇】执行delete删除大量数据后,磁盘未清空,为什么?

目录

  • 迁移脚本
    • 删除数据以及备份数据
  • 解决方法
    • OPTIMIZE TABLE
    • 二进制日志
    • 按月生成数据

最近某个项目虽说用户量不大,但是,单表的数据量越来越大,mysql一般单表超过千万级别后,性能直线下降,所以利用shardingphere按月做了一个分表,所以得把历史数据迁移到各个分月的表中。

在这里插入图片描述

迁移脚本

直接开始迁移,执行如下脚本

insert into cern_202301
select * from cern_bak
where report_time>='2023-01-01 00:00:00'
and report_time<='2023-01-31 23:59:59'
  • report_time是作为分表字段的依据,这里是迁移1月份的数据到cern_202301中
  • 因为已经迁移最近半年的数据到分表中,保证在不影响业务的前提下,做迁移操作
  • 迁移到一半发现磁盘空间不够

如果是你,你的解决方案是?

  • 可以留言一起,交流一下学习一下

删除数据以及备份数据

####一次导出所有数据
mysqldump -uroot -p123456 iopace cern > /mnt/datadisk1/cern.sql

###按月导出数据--不用执行,了解即可
 mysqldump -uroot -p123456 iopace cern_bak --where=" report_time>='2023-04-01 00:00:00' and report_time<='2023-04-30 23:59:59'" > /mnt/datadisk1/cern2304.sql

###导入数据--不用执行,了解即可
mysql -u root -p123456 iopace<cern2307.sql

  • root为用户名
  • 123456为密码
  • iopace为数据库名
  • cern为需要导出的表名
  • /mnt/datadisk1/cern.sql 表示导出到哪里,因为我们有三个磁盘,这是另外一个磁盘,暂时未使用,所以数据导出到这里
    在这里插入图片描述
  • 因为我已经把业务已经切换到分表来了,所以cern表是不会存在写入操作的,一点要注意,防止丢失数据

数据已备份,那我们就可以执行delete操作

delete from cern
where report_time>='2024-02-01 00:00:00'
and report_time<='2024-02-10 23:59:59'
  • 之前已经迁移半年的数据,那我就delete最近半年的数据
  • 因为表数据量有点大,所以,我都是10天删除一次,防止花费时间过长
  • 清理大半年的数据后,发现磁盘空间还是没有任何的变化

按我们正常的理解,是不是删除数据后,磁盘大小就会变大

使用delete删除数据,不会把数据文件删除,而是将数据文件的标识位删除,因此会留下数据碎片,当有新数据写入的时候,mysql会利用这些已删除的空间再写入。如果碎片空间满,就不能插入

解决方法

OPTIMIZE TABLE

  • 会优化表,会锁表,建议1个月处理一次,如果不存在大量删除的情况,不太建议使用
  • 实现原理,实际上就是把当前表的数据复制到临时表,再删除当前表,再把临时表重命名为当前表,所以对空间会有要求
OPTIMIZE TABLE cern;
  • cern为需要优化的表名
  • cern表20G左右,1个月的数据大约2.5G左右,当前磁盘可用空间2.5G左右,所以肯定是没有办法通过该方式来优化的
  • 空间足够,可以通过他来处理大量delete的情况

二进制日志

所有的修改、删除都会存放在二进制文件中,有时候误删除后,我们也可以通过二进制日志还还原数据,所以这个文件会有点庞大
在这里插入图片描述

###259200====30天,所以二进制文件保存的周期为30天
show variables like '%expire%';

###当前二进制历史文件存放目录
 show BINARY logs;
###当前正在运行的二进制日志,注意,这个文件是不能动的
 show master status;

在这里插入图片描述

  • File 表示当前正在运行的二进制日志文件是那个
  • position表示位置,例如主从复制的时候,就会用到
    在这里插入图片描述
  • 下面有很多日志文件,这是我删除一部分后的,当时,大约有20多个文件,每个文件1.5G左右,被我删除到88
  • purge binary logs to ‘binlog.000088’; 表示删除88之前的所有二进制文件

这个时候,我们再去df -h查看磁盘,磁盘空间已释放,

按月生成数据

如果二进制腾出来一部分空间后,还不够,历史数据迁移到各个月分表的,还有一种方式。
就是把cern表的数据,按月导出成sql脚本,按月命名
找一个测试环境,把几个月的sql脚本导入后,测试一下总记录数是否有丢失
如果没有丢失,就可以把cern表删除,再通过dump导入sql的方式,一个月一个月的导入数据

###按月导出数据--不用执行,了解即可
mysql -u root -p123456 iopace<cern2307.sql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/618341.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c语言柔性数组

柔性数组 在c99中&#xff0c;结构体的最后一个元素允许是未知大小的数组&#xff0c;这个就是柔性数组 柔性数组的特点 1.结构体中的柔性数组成员前面必须至少有一个其他成员 2.sizeof返回的这种结构大小不包括柔性数组的内存 3.包含柔性数组成员的结构用malloc()函数进行内存…

C++11:常用语法汇总

目录 &#x1f341;统一的列表初始化 { }initializer_list &#x1f341;decltype 推导表达式类型&#x1f341;可变参数模板解析可变参数包方法一方法二 &#x1f341;lambda 表达式捕捉列表的使用运用场景举例lambda表达式 与 函数对象 &#x1f341;统一的列表初始化 { } 在…

8个免费无版权视频素材网站,高清无水印视频任性下载

在数字化时代&#xff0c;优质的视频素材成为各种项目不可缺少的元素&#xff0c;从短片制作到商业广告&#xff0c;高品质的视频能显著提高作品的吸引力和传播效果。然而&#xff0c;寻找既免费又无版权问题的高清视频素材并非易事。以下介绍几个优秀的免费视频素材网站&#…

基于YOLOV8复杂场景下船舶目标检测系统

1. 背景 海洋作为地球上70%的表面积&#xff0c;承载着人类生活、经济发展和生态系统的重要功能。船舶作为海洋活动的主要载体之一&#xff0c;在海上运输、资源开发、环境监测等方面发挥着重要作用。复杂海洋环境下的船舶目标检测成为了海事管理、海洋资源开发和环境保护等领…

嵌入式全栈开发学习笔记---C语言笔试复习大全17

目录 指针和字符串 用数组和指针定义字符串 两种定义方法有什么区别&#xff1f; 第一个区别&#xff1a; 第二个区别&#xff1a; 第三个区别&#xff1a; 指针数组 上一篇复习了指针和数组,这一篇我们来复习指针和字符串。 说明&#xff1a;我们学过单片机的一般都是有…

(Java)心得:LeetCode——18.四数之和

一、原题 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; …

【智能算法应用】基于果蝇算法-BP回归预测(FOA-BP)

目录 1.算法原理2.数学模型3.结果展示4.代码获取 1.算法原理 【智能算法应用】智能算法优化BP神经网络思路【智能算法】果蝇算法&#xff08;FOA&#xff09;原理及实现 2.数学模型 数据集样本特征数为13&#xff0c;适应度函数设计为&#xff1a; f i t n e s s e r r o…

推荐我常用的爬虫工具,三种爬虫方式,搞定反爬和动态页面

我和很多学python的同学聊过&#xff0c;至少有30%以上的人学Python是为了网络爬虫&#xff0c;也就是采集网站的数据&#xff0c;不得不说这确实是一个刚性需求。 但一个残酷的事实是&#xff0c;即使一部分人学了Python&#xff0c;掌握了requests、urllib、bs4等爬虫技术&a…

JUC下的Java java.util.concurrent.Locks详解

java.util.concurrent.locks 包介绍 java.util.concurrent.locks 包是Java并发编程中非常重要的一个部分&#xff0c;它提供了比内置synchronized关键字更为灵活的锁机制&#xff0c;用于多线程环境下的同步控制。这个包中最核心的是Lock接口&#xff0c;以及一系列实现类&…

整理好的中债国债3年期到期收益率数据集(2002-2023年)

01、数据简介 国债&#xff0c;又称国家公债&#xff0c;是由国家发行的债券&#xff0c;是中央ZF为筹集CZ资金而发行的一种ZF债券&#xff0c;是中央ZF向投资者出具的、承诺在一定时期支付利息和到期偿还本金的债权债务凭证。 中债&#xff0c;是指由中国中债登记结算有限责…

【ROS2】功能包

文章目录 ROS2 功能包创建功能包编译功能包设置环境变量功能包的结构C 功能包结构Python 功能包结构 参考链接 ROS2 功能包 在 ROS2 工作空间的 src 目录下进行编写的文件并不是普通的文件&#xff0c;而是被称作功能包。 创建功能包 Usage: ros2 pkg create --build-type …

【C/C++】内存分布

本文第一部分主要介绍了程序内存区域的划分以及数据的存储。第二部分有一段代码和一些题目&#xff0c;全面直观得分析了程序中的数组在内存中的存储。 因为不同的数据有不同的存储需求&#xff0c;各区域满足不同的需求&#xff0c;所以程序内存会有区域的划分。 根据需求的不…

线程同步--条件变量,信号量

生产者和消费者模型 案例 /*生产者消费者模型&#xff08;粗略的版本&#xff09; */ #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h>// 创建一个互斥量 pthread_mutex_t mutex;struct Node{int num;struct Node …

练习题(2024/5/12)

1二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4…

异常处理/ROS2异常处理模块源码解读与浅析

文章目录 概述ros2/rcutils/src/error_handling模块自身异常处理错误状态结构与存储本模块初始化错误状态的设置错误状态的获取错误状态的清理不丢失旧错误状态把手段还原为目的其他 概述 本文从如下几个方面对 ROS2.0 中 rcutils 库 error_handling 错误处理模块的源码进行解…

day-34 二叉树的锯齿形层序遍历

思路 相较于二叉树的层序遍历&#xff0c;多了一个flag变量,当flag等于0时&#xff0c;把当前层的数组从左到右放入链表&#xff0c;当flag等于1时&#xff0c;把当前层的数组从右到左放入链表。 解题方法 注意&#xff1a;链表删除一个数据后会立即重排&#xff0c;所以删除同…

Linux进程控制——Linux进程终止

前言&#xff1a;前面了解完前面的Linux进程基础概念后&#xff0c;我们算是解决了Linux进程中的一大麻烦&#xff0c;现在我们准备更深入的了解Linux进程——Linux进程控制&#xff01; 我们主要介绍的Linux进程控制内容包括&#xff1a;进程终止&#xff0c;进程等待与替换&a…

GoF之代理模式(静态代理+动态代理(JDK动态代理+CGLIB动态代理带有一步一步详细步骤))

1. GoF之代理模式&#xff08;静态代理动态代理(JDK动态代理CGLIB动态代理带有一步一步详细步骤)&#xff09; 文章目录 1. GoF之代理模式&#xff08;静态代理动态代理(JDK动态代理CGLIB动态代理带有一步一步详细步骤)&#xff09;每博一文案2. 代理模式的理解3. 静态代理4. 动…

函数式接口-闭包与柯里化

闭包 定义 示例 注意 这个外部变量 x 必须是effective final 你可以生命他是final&#xff0c;你不声明也会默认他是final的&#xff0c;并且具有final的特性&#xff0c;不可变一旦x可变&#xff0c;他就不是final&#xff0c;就无法形成闭包&#xff0c;也无法与函数对象一…

单链表经典算法OJ题---力扣206,876(带图详解

1.链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;【点击即可跳转】 思路&#xff1a;创建三个指针&#xff0c;看下图 注意&#xff1a;n3如果为空&#xff0c;则不能继续指向下一节点&#xff0c;需要进行判断 代码实现&#xff1a; struct ListNode* reverseLi…