MySQL如何删除#sql开头的临时表
1. 现象
巡检时发现服务器磁盘空间不足,通过查看大文件进行筛选是发现有几个#sql开头的文件,且存在超过100G及10G以上的文件。

2. 原因
如果MySQL在一个 ALTER TABLE操作(ALGORITHM=INPLACE)的中间退出,那么可能会留下一个占用系统空间的临时表。例如,在对一张表(大表)添加索引时中途中断、磁盘不足导致异常或正在添加索引时实例被kill等等情况所致。
注意: 此类表空间文件不能直接rm -f的方式物理删除,因为该信息记录在ibdata的共享表空间里,直接删除后,后续实例重启时会出现错误。
3. 处理方法
3.1 同时存在.frm 和.ibd名称相同的文件
如果 #sql-*.ibd 和 #sql-*.frm两个文件都存在数据目录里的话,可以直接drop table。但注意删除时候表名的变化。
/* 直接删除,表名前加#mysql50 */
root@testdb 01:42:57> DROP TABLE `#mysql50##sql-ib87-856498050`;
注: #mysql50#前缀是MySQL 5.1中引入的文件名安全编码。另外,表名因不符合命名规范,想要执行该脚本需要将表名用反引号括起来。
3.2 创建新表方式删除
因为本例中没有存在.frm 和.ibd名称相同的文件的情况,因此采用创建一张与ibd表空间对应的结构(字段名及索引)一致的表,然后将frm文件拷贝为和ibd一致的文件,再进行删除。
下面处理截图中#sql-ib1516-2335726735.ibd文件,步骤如下:
a) 创建一张与#sql-ib1516-2335726735相同的表
root@testdb 08:47:35>create table company20191216 like company;
Query OK, 0 rows affected (0.05 sec) root@testdb 08:48:59>exit
Bye
b) 拷贝为#sql-ib1516-2335726735.frm的定义文件
[root@db4 testdb]# cp -p company20191216.frm \#sql-ib1516-.frm
c) 删除表
因为上一步拷贝时使用-p的方式,即权限和原文件权限一致,属主及group均为mysql,因此可以直接在数据库里读取删除,如果权限不对,必须先修改文件权限。
root@testdb 08:49:54>drop table `#mysql50##sql-ib1516-2335726735`;
Query OK, 0 rows affected (6.65 sec)
此时,135G的文件就已经删掉了(其实另一个文件#sql-821_2.frm文件也一并删了)

注: 删除这种100G的表不建议直接删除,而是通过创建硬链接的方式处理。
3.3 修改frm文件名与ibd文件名一致
上一步中删除ibd文件时,其中一个frm也自动删除了。为此,尝试通过修改frm文件名和ibd文件名一致的方式处理。但要注意,由于不确定是否结构一致,修改后可能异常,但如果没有暴力处理,通常均可以成功。如下:
a) 修改frm文件名与ibd文件名一致
[root@db4 testdb]# mv \#sql-a846_2.frm \#sql-ib1570-.frm
b) 删除表
root@testdb 01:41:06>DROP TABLE `#mysql50##sql-ib1570-121877015`;
Query OK, 0 rows affected (1.70 sec)

done!
其实还有其他的方式处理,大家可以自行测试。
参考资料:官方文档https://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html
MySQL如何删除#sql开头的临时表的更多相关文章
- sql server创建临时表的两种写法和删除临时表
--创建.删除临时表 --第一种方式 create table #tmp(name varchar(255),id int) --第二种方式 select count(id) as storyNum ...
- mysql删除sql表添加别名及删除sql的注意事项
本文为博主原创,未经允许不得转载: 根据平常的习惯,个人会将操作的表后面添加一个别名,无论是使用还是不使用的时候,均是为了 修改还是扩展sql的时候更加安全,方便,快捷. 今天在写删除的sql时,对表 ...
- 浅谈MySQL中优化sql语句查询常用的30种方法 - 转载
浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使 ...
- 【MySQL】MySQL基础(SQL语句、约束、数据类型)
数据库的基本概念 什么是数据库? 用于存储和管理数据的仓库 英文单词为:DataBase,简称DB 数据库的好处? 可以持久化存储数据 方便存储和管理数据 使用了统一的方式操作数据库 -- SQL 常 ...
- mysql使用基础 sql语句(一)
csdn博文地址:mysql使用基础 sql语句(一) 点击进入 命令行输入mysql -u root -p,回车再输入密码,进入mysql. 终端命令以分号作为一条语句的结束,可分为多行输入,只需 ...
- mysql 查看 删除 日志操作总结(包括单独和主从mysql)
我们可以在mysql的安装目录下看到mysql的二进制日志文件,如mysql-bin.000***等,很多人都不及时的处理,导致整个硬盘被塞满也是有可能的.这些是数据库的操作日志.它记录了我们平时使用 ...
- MySQL 存储过程删除大表
1.权限问题 alter routine 编辑或删除存储过程 create routine 建立存储过程 execute 创建存储过程 2.存储过程相关的一些命令 show procedure sta ...
- mysql批量删除指定前缀或后缀表
今天突然发现我们数据库中多出很多表,后缀名为"copy",预计是navicat直接拷贝导致的,然后要对这些有同样后缀名的表进行删除,假设一个一个选择会非常麻烦,表计较多,在网上找了 ...
- MySQL的常用SQL语句.md
修改密码 这是常见的大家一般都要用的 首先 安装成功了打开cmd --> mysql -u root -p -->输入你的密码 修改mysql root用户密码 格式 ...
随机推荐
- java.lang.NoSuchMethodError: org.apache.tomcat.JarScanner.scan(Ljavax/servlet/ServletContext;Ljava/lang/ClassLoader;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set;)V
java.lang.NoSuchMethodError: org.apache.tomcat.JarScanner.scan(Ljavax/servlet/ServletContext;Ljava/l ...
- Running serveral https server on a single IP address
Nginx 在一个IP上配置多个https server时,默认只会发送默认server name的证书.这是由ssl 协议本身行为导致的:先建立ssl connection,后发送http请求.即n ...
- Openlayers ol.interaction.Select取消默认选中效果
说明: 在使用ol.interaction.Select进行点击查询时,默认会把点击选中的要素显示在地图上 我的需求是做轨迹回放,并可以点击轨迹上某一点,进行查询.这时候如果重新播放轨迹,会发现这个选 ...
- 图解 Spring:HTTP 请求的处理流程与机制【2】
2. HTTP 请求在 Web 容器中的处理流程 Web 容器以进程的方式在计算机上运行,我们知道进程是系统资源分配的最小单元,线程是系统任务执行的最小单元.从这个角度看,Web 容器就像是邮包收件人 ...
- webuploader 快速应用(C#)
百度的WebUploader前端插件作为目前比较好用且免费的附件上传工具,利用了断点续传特点实现了大文件上传功能,其更好的兼容性与界面效果完全可以替换掉IE的activex 上传控件.许多人或许还不知 ...
- 微信小程序获取二维码(直接上代码)https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
应为是直接返回二进制数据所有与其他接口些许差别,希望能帮助现在的你! 谢谢!!! /** * 37.微信二维码生成 */ public String getWeiXinCourseMap() { ...
- C语言基础——进制转换 / 数据表示
第一部分:进制转换 二进制:由0~1构成,逢2进1 八进制:由0~7构成,逢8进1 十六进制:由0~9.A~F构成,逢16进1 两个基本概念 基数:n进制基数为n 123.4 = 1*10^2 + 2 ...
- jqery 动态添加元素 绑定事件
jQuery动态添加元素: var url = "...";//服务地址 $.ajax({ type: 'post', url: url, data:{fireId:fireId} ...
- maven中的setting文件
localRepository默认jar包下载到本地哪个目录下 pluginGroups 把自己的插件放在这里进行管理 这样不用写groupId和artifactId 一个生命周期包含很多 ...
- Feign超时设置
转-原文:https://xli1224.github.io/2017/09/22/configure-feign/ 在分析 Feign 源码的时候,我们看到 Feign 构建代理对象是分了几层的,一 ...