mysql暂时的表_怎样删除Mysql以“#sql-”开头的暂时表

象:在重建索引后,发现Mysqlserver的磁盘空间快满了

在用例如以下指令重建索引

mysql> alter table skatetab add unique index(id, uid), drop primary key, add primary key(uid, id);

在重建索引的过程中,因为空间缺乏,致使Mysql server reboot,重新启动以后发现空间少了100G。所以查看是哪个文件夹占用了这100G,最终发现在数据文件夹里发现

十分多相似#sql-*.ibd暂时文件和同文件名称的#sql-*.frm。已然知道是暂时表了,那就删去吧,必定不能直接经过rm删去了,因为在ibdata里保留字典信息和Undo信

息,数据库重新启动后会报错的。

删去的办法:

在alter table的过程中,假定Mysql俄然crash了。就会在数据文件夹里存在一些中心表,这些中心表是以“#sql-”开头的暂时表,在你的数据文件夹里会看到

#sql-*.ibd和对应的 #sql-*.frm ,假定 #sql-*.ibd 和 #sql-*.frm两个文件都存在数据文件夹里的话,可以直接drop table。相似:

mysql> drop table `#mysql50##sql-928_76f7`;

前缀”#mysql50#“是让Mysql疏忽文件名称的安全编码,这个前缀是在Mysql5.1引进的

因为我的数据文件夹里#sql-*.ibd 和 #sql-*.frm两个文件都存,所以直接drop就可以了。磁盘空间100多G也回收了,例如以下所看到的

mysql> drop table `#mysql50##sql-928_76f7`;

Query OK, 0 rows affected (16.28 sec)

阐明:假定在数据文件夹里只是有#sql-*.ibd。而没有#sql-*.frm的话,就需要特殊处理

1.在还有一数据schema里创立一个和欲删去表相同的表结构(包括同样的列和索引)

mysql> create database test

mysql> create table test.tmp like  skatetab;       //只是复制表的结构和索引。不复制数据

2.把新创立的暂时表的.frm文件拷贝到欲删去的数据文件夹里。并改动和 ”#sql-*.ibd“相同的文件名称

shell> cp test/tmp.frm  #sql-928_76f7.frm

3.承认#sql-*.ibd 和 #sql-*.frm两个文件都存,然后直接drop,例如以下:

mysql> drop table `#mysql50##sql-928_76f7`;

(责任编辑:最模板)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值