西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > 开发教程 > mysql教程 >

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

时间:2015-12-31 09:33来源:未知 作者:好模板 点击:
象:在重建索引后,发现Mysqlserver的磁盘空间快满了 在用例如以下指令重建索引 mysql alter table skatetab add unique index(id, uid), drop primary key, add primary key(uid, id); 在重建索引的过程中,因为空

象:在重建索引后,发现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`;

(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容