数据库教程:MySQL 超大表快速删除方式

mysql 超大表快速删除mysql里面直接对大表执行drop table删除有可能导致mysql hang住,对业务造成影响。删除超大表的前提是该表是独立表空间,这样删除才有效。表创建一个硬链接#

mysql 超大表快速删除

mysql里面直接对大表执行drop table删除有可能导致mysql hang住,对业务造成影响。删除超大表的前提是该表是独立表空间,这样删除才有效。

表创建一个硬链接

# du -sh pay_bills.ibd   175g        pay_bills.ibd  # 创建硬链接  # ln pay_bills.ibd pay_bills.ibd_hdlk

执行表删除

在linux中,每个存储文件都会有指向该文件的inode index,多个文件名可以通过相同inode index指向相同一个存储文件。

如果该文件名引用的inode index上还被其他文件名引用,则只会删除该文件名和inode index之间的引用

如果该文件名引用的inode index上没有被其他文件名引用,则删除该文件名和inode index之间的引用并删除inode index指向的存储文件。

实际上只是删除了对 pay_bills.ibd 的一个文件引用,我们 pay_bills.ibd_hdlk 对物理文件的引用还是存在的,就不会执行os级别的删除操作,io波动不大,降低对mysql的影响。

mysql> drop table pay_bills;  query ok, 0 rows affected (3.24 sec)

执行文件删除

安装 truncate 工具

# yum install coreutils -y

执行删除脚本

#!/bin/bash  truncate=/usr/bin/truncate  # 从175g开始每次删除2g,最后如果脚本truncate后还剩下部分文件,使用rm删除  for i in `seq 175 -2 1`; do     $truncate -s ${i}g  pay_bills.ibd_hdlk    sleep 1  done  rm -f pay_bills.ibd_hdlk

mysql快速清空大表数据       

项目初次上线,进行性能测试造的数据量巨大,都是些不可用数据,但又有一些是必须保留的,很多时候需要进行系统性的清理数据或者是,将有用的数据筛选出来之后再插入到表中!保留表结构或者重新建表(导出数据库中的表结构),重新执行sql语句。

mysql删除或清空表数据

清空表数据的五种方式

1、truncate–删除所有数据,保留表结构,不能撤销还原

2、delete–是逐行删除速度极慢,不适合大量数据删除

3、drop–删除表,数据和表结构一起删除

4、导出表结构,再次执行一遍;

5、导出数据库所有表结构,再次执行一遍,清空所有表(与4一致)

清空表数据语法

truncate table 表名;(仅保留表结构,速度很快)

delete from 表名;

delete from 表名 where 列名="value ";

drop `t_product_events` if exist;  create table `t_product_events` (  `id` bigint(20) unsigned not null auto_increment comment '事件id',  `level` int(11) null default null,  `product_id` bigint(20) not null comment '产品类型id',  `identifier` varchar(64) character set utf8 collate utf8_general_ci null default null,  `name` varchar(64) character set utf8mb4 collate utf8mb4_general_ci not null comment '事件名称',  `description` varchar(256) character set utf8mb4 collate utf8mb4_general_ci null default null comment '事件描述',  `type` int(11) not null comment '事件类型,0:info(信息)、1:alert(告警)、2:error(故障)',  `ref_id` int(11) unsigned null default 0 comment '引入模板时有意义',  `original_required` tinyint(2) not null,  `update_required` tinyint(2) not null default 0 comment '是否是标准功能的必选事件,0:可选,1:必选',  `custom` tinyint(2) not null comment '0:模板导入,1:自定义',  `method` varchar(128) character set utf8mb4 collate utf8mb4_general_ci not null comment '事件对应的方法名称(根据identifier生成)',  `create_time` datetime(0) not null default current_timestamp,  `update_time` datetime(0) not null default current_timestamp on update current_timestamp(0),  `ref` bigint(20) null default null,  `related` int(11) null default 0 comment '被预发布或者已发布关联个数',  `copyright` tinyint(2) null default 0 comment '是否发布过, 1 发布过 0未发布',  `prerelease` tinyint(2) null default 0 comment '是否预发布过, 1 预发布过 0未预发布',  primary key (`id`) using btree,  index `idx_product_id`(`product_id`) using btree comment '查询优化'  ) engine = innodb auto_increment = 497560 character set = utf8mb4 collate = utf8mb4_general_ci comment = '产品类型事件表' row_format = compact;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

需要了解更多数据库技术:MySQL 超大表快速删除方式,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/1209873.html

(0)
上一篇 2022年8月30日
下一篇 2022年8月30日

精彩推荐