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