Mysql清除#sql开头的临时表

一、现象

系统预警提示磁盘空间不足:

排查发现数据库中存在#sql开头的文件,而且各个都不小,每个都有几十G的大小

然后搜到了这篇文章:

MySQL如何删除#sql开头的临时表 - 知乎

然后发现我这个是属于第二种,就是只有idb文件的这种情况。然后比较糟糕的是,我并不能确定,我这个临时文件之前的表结构是什么

二、解决方案

以想要删除的上图中的数据库为例,进入到自己业务数据库实例对应的information_schema数据库中,找到  INNODB_SYS_TABLES 这张表,在 NAME 这一列,按照下图所示的方式,根据文件名搜索到 TABLE_ID 。我这里要删除掉#sql-ib3264420-2285332718.ibd

用这个ID,到 INNODB_SYS_COLUMNS 表中就能找到这个表对应哪些列。

这里就可以凭借自己对业务表的了解,知道这张表,是哪张业务表产生的临时表了。

然后保险起见,在别的库中,新建下这张表,表名字可以随意起

然后把这张新建的表的.frm文件,拷贝到出现临时表的数据库文件路径下,然后把它重命名成跟要删除的文件同名的,保持.frm后缀。比如我要删除的临时文件是 #sql-ib3264420-2285332718.ibd

那重命名之后的文件就叫 #sql-ib3264420-2285332718.frm

这样.frm 和.ibd文件就成对出现了

这时,返回数据库 执行删表语句,注意表名要再文件名基础上增加 #mysql50#前缀

再看文件系统,临时表就已经不存在了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值