我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL线上数据库怎么清理数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL线上数据库怎么清理数据

这篇文章将为大家详细讲解有关MySQL线上数据库怎么清理数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

01 场景分析

 今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了看数据的分布,大概是要删除数据表中的两千七百多万条记录,数据表的总记录是两千八百多万,也就是说,要删除的记录占了总记录的绝大部分比重,两千七百多万的数据记录,要是删除的话,使用的时间是相当长的,对线上的业务肯定会造成影响。这里将实际的应用案例简单重构为以下方法:

mysql> select date,count(*) from test.tbl_a  group by date;+----------+----------+|   date | count(*) |+----------+----------+| |  63103 || 20190118 | || |  125916 || 20190120 |   || |  129198 || 20190122 |  || | 5191247 |+----------+----------+ rows in set (13.21 sec)

上面就是重构之后的表的结构,我们可以看到,test数据库中的表tbl_b按照date分组之后,每个组的数据量都不小,而我们的需求是将date为20190118和20190123的记录删除,可以看到这两种记录总计有两千多万条,占了表中数据的绝大部分,如果直接删除的话,线上的业务肯定会受到阻塞。

以下是操作方法,需要注意的是,应用下面的操作方法的前提是:

要删除的数据占了数据表中的绝大部分。

02 操作办法

 通过分析,知道剩余的表数据对于全表来说是很小的一部分,这个操作我们分为4步:

我们先把剩余的数据存入到另外一个数据库test1中:

create table test1.tbl_b_new as select * from test.tbl_b where date in(,,,,);

这个操作的时间只有3s左右;

我们在test1数据库中创建一个同名的表tbl_b,它的结构和test数据库中的tbl_b数据结构一致:

create table test1.tbl_b like test.tbl_b;

紧接着,我们使用数据库中的rename操作将表test中的表tbl_b和test1中的表tbl_b进行交换,等价于将test数据库中的表所有数据清除。

RENAME TABLE test.tbl_b  TO test1.tbl_b_bak,         test1.tbl_b  TO test.tbl_b,         test1.tbl_b_bak TO test1.tbl_b;

再讲第一步保存的剩余数据填充到新表中来,如下:

insert into test.tbl_b select * from  test1.tbl_b_new;

03 结果分析

 看上去我们好像把问题搞复杂了,直接删除的事情,被我们搞的多了好几个步骤,但是实际上不是这样的,这一套操作可以帮我们节省好几分钟时间,对线上业务的影响也更小,原因如下:

  1. 我们使用create table as的方法创建剩余的数据表,这种方法使我们仅对数据表中的少部分数据进行了操作。避免了我们对过多的数据进行扫描。

  2. mysql中对大表进行rename的操作,rename命令会直接修改底层的.frm文件,所以它的速度是相当之快的。

   第二个特点给我们提供了一种思路,在一个很着急的业务中,要使用一个表的时候,往往不给我们留充足的时间备份表,如果我们想要删除一个大表里面的数据,而且需要进行相关备份,我们可以通过rename操作迅速处理,然后再想办法去备份rename之后的表。

    上面的例子中使用create table as 和create table like两种克隆表的方式,有几点需要注意:

create table like方式会完整地克隆表结构,但不会插入数据,需要单独使用insert into或load data方式加载数据
create table as  方式会部分克隆表结构,完整保留数据

    如果有兴趣,可以做做试验进行验证。

关于“MySQL线上数据库怎么清理数据”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL线上数据库怎么清理数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL线上数据库怎么清理数据

这篇文章将为大家详细讲解有关MySQL线上数据库怎么清理数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。01 场景分析 今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了看数据的分
2023-06-14

MySQL 线上数据库清理数据的方法

01 场景分析 今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了看数据的分布,大概是要删除数据表中的两千七百多万条记录,数据表的总记录是两千八百多万,也就是说,要删除的记录占了总记录的绝大部分比重,两千七百多万的数
2022-05-14

mysql怎么清空数据库所有数据

要清空数据库所有数据,可以使用以下两种方法:使用TRUNCATE TABLE语句清空所有表的数据:TRUNCATE TABLE table1;TRUNCATE TABLE table2;...依次将所有表的数据清空。使用DELETE语句
mysql怎么清空数据库所有数据
2024-04-09

怎么清空mysql的数据库

要清空 mysql 数据库,可以使用 truncate table 命令(直接删除所有数据,速度快),或 delete 命令(逐行删除,可条件删除)。注意:truncate table 命令不能用于有外键约束的表,而 delete 命令可以
怎么清空mysql的数据库
2024-08-05

sql数据库怎么清理缓存

清理 sql 数据库缓存的方法取决于所使用的 dbms:microsoft sql server:使用 dbcc dropcleanbuffers 命令或关闭和重新打开数据库。mysql:使用 flush 命令或更改 innodb 缓冲池状
sql数据库怎么清理缓存
2024-06-03

oracle怎么清空数据库表数据

要清空Oracle数据库表的数据,可以使用以下方法之一:使用DELETE语句:DELETE FROM 表名;这将删除表中的所有数据,但保留表结构和约束。使用TRUNCATE TABLE语句:TRUNCATE TABLE 表名;这将删除表
oracle怎么清空数据库表数据
2024-04-09

db2数据库满了怎么清理

当DB2数据库满了,可以尝试以下方法进行清理:删除不必要的数据:检查数据库中是否有不必要的数据或者过期的数据,可以通过删除这些数据来释放空间。压缩表空间:通过压缩表空间来优化数据库存储空间的利用,可以减少数据库的空间占用。重新组织表空间
db2数据库满了怎么清理
2024-04-09

怎么清理sql数据库空间

要清理SQL数据库空间,可以采取以下几个步骤:1. 删除不再需要的数据:首先,检查数据库中是否有不再需要的数据,比如过期的日志、临时表、不再使用的备份等。可以使用DELETE或者TRUNCATE语句来删除这些数据。2. 压缩数据库文件:可以
2023-09-04

mysql怎么清空数据

mysql提供了三种清除表中数据的途径:truncate table(快速清空数据,不可逆转)、delete from(根据条件删除,可记录操作)、drop table(删除表及其所有数据,不可逆转)。如何清空 MySQL 数据MySQL
mysql怎么清空数据
2024-05-22

mysql数据库怎么备份 mysql数据库怎么恢复数据库

如何备份和恢复 mysql 数据库?备份:使用 mysqldump 工具转储数据库架构和数据到 sql 文件。使用 phpmyadmin 图形界面导出数据库。恢复:使用 mysql 命令加载 sql 文件中的内容到数据库。使用 phpmya
mysql数据库怎么备份 mysql数据库怎么恢复数据库
2024-08-13

虚拟主机数据库怎么清理

清理虚拟主机数据库可以通过以下步骤进行:1. 备份数据库:在清理之前,务必先备份数据库,以防意外操作导致数据丢失。2. 删除无用数据:检查数据库中是否有无用的数据,如过期的日志、临时文件等,并进行删除操作。可以使用SQL语句或数据库管理工具
2023-08-26

mysql数据库url怎么写 mysql数据库怎么插入数据

mysql 数据库 url 编写:格式为 jdbc:mysql://[hostname]:[port]/[database name],其中 hostname 为服务器地址,port 为监听端口(默认 3306),database name
mysql数据库url怎么写 mysql数据库怎么插入数据
2024-08-13

怎么清理Docker数据

这篇文章主要介绍了怎么清理Docker数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Docker 不会对你的系统进行任何配置更改……但是它会占用大量的磁盘空间。(使用 D
2023-06-20

navicat怎么清空数据库

使用 navicat 清空数据库的步骤:连接到数据库。选择要清空的表,右键单击并选择“数据操作”>“清空”。确认清空操作。等待操作完成。注意:清空操作永久删除数据,请提前备份。若存在相关约束或触发器,请先删除。如何使用 Navicat 清空
navicat怎么清空数据库
2024-04-24

mysql数据库怎么用 mysql怎么建数据库

如何使用 mysql 数据库?创建数据库(使用 create database 命令)。创建表(使用 create table 命令,指定列名和数据类型)。插入数据(使用 insert into 语句)。查询数据(使用 select 语句,
mysql数据库怎么用 mysql怎么建数据库
2024-08-13

mysql怎么清空数据库下所有表

要清空数据库下的所有表,可以使用以下命令:首先连接到数据库:mysql -u 用户名 -p 数据库名然后使用以下命令来清空所有表:SET FOREIGN_KEY_CHECKS = 0;SET GROUP_CONCAT_MAX_LEN=32
mysql怎么清空数据库下所有表
2024-04-09

编程热搜

目录