欢迎投稿

今日深度:

Mysql如何删除以“#sql-”开头的临时表,

Mysql如何删除以“#sql-”开头的临时表,


author:skate
time:2014/09/28

 

Mysql如何删除以“#sql-”开头的临时表

 

现象:在重建索引后,发现Mysql服务器的磁盘空间快满了

在用如下命令重建索引

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`;


参考:http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting-datadict.html


------end------


怎彻底删除mysql

前言:只适用在Windows下
--在控制面板中删除MySQL程序
--然后在C盘中删除MySQL文件夹
--再在用户里面MySQL的数据区,我的是在:D:\Documents and Settings\All Users\Application Data\MySQL
--最后一步,也是最关键的一步,就是要在注册表里删除mysql
打开注册表(cmd下输入regedit),打开后在HEKY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Programs\MySQL,最后删除这个文件就可以了
 

怎彻底删除mysql

前言:只适用在Windows下
--在控制面板中删除MySQL程序
--然后在C盘中删除MySQL文件夹
--再在用户里面MySQL的数据区,我的是在:D:\Documents and Settings\All Users\Application Data\MySQL
--最后一步,也是最关键的一步,就是要在注册表里删除mysql
打开注册表(cmd下输入regedit),打开后在HEKY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Programs\MySQL,最后删除这个文件就可以了

-------------------------------------------------------------------------
下面说说如何删除Oracle
一、Linux 平台
Linux 平台下卸载Oracle 非常简单,即:删除Oracle安装目录下的所有文件和文件夹即可。
二、Windows 平台
其实这篇文章我主要想就在Windows平台上如何彻底的卸载Oracle进行说明。
因为Oracle在Windows下的卸载颇有一些麻烦,如果不能完全卸载有可能影响将来的再次安装!常规卸载方法是运行Oracle的自带的卸载程序,可遗憾的是我在卸载时总不能完全卸载,当我再次安装Oracle时,就会出现莫名其妙的问题,并且这种卸载方式比较麻烦,比较慢,下面我介绍一种比较快并且能够彻底卸载Oracle的方法。
1.关闭oracle所有的服务。可以在windows的服务管理器中关闭;

2.打开注册表:regedit 打开路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
删除该路径下的所有以oracle开始的服务名称,这个键是标识Oracle在windows下注册的各种服务!
3.打开注册表,找到路径:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
删除该oracle目录,该目录下注册着Oracle数据库的软件安装信息。
4.删除注册的oracle事件日志,打开注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
删除注册表的以oracle开头的所有项目。
5.删除环境变量path中关于oracle的内容。
鼠标右键右单击“我的电脑-->属性-->高级-->环境变量-->PATH 变量。
删除Oracle在该值中的内容。注意:path中记录着一堆操作系统的目录,在windows中各个目录之间使用分号(; )隔开的,删除时注意。
建议:删除PATH环境变量中关于Oracle的值时,将该值全部拷贝到文本编辑器中,找到对应的Oracle的值,删除后,再拷贝修改的串,粘贴到PATH环境变量中,这样相对而言比较安全。
6.重新启动操作系统。
以上1~5个步骤操作完毕后,重新启动操作系统。
7.重启操作系统后各种Oracle相关的进程都不会加载了。这时删除Oracle_Home下的所有数据。(Oracle_Home指Oracle程序的安装目录)
8.删除C:&......余下全文>>
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3545.html NewsArticle Mysql如何删除以“#sql-”开头的临时表, author:skate time:2014/09/28 Mysql如何删除以“#sql-”开头的临时表 现象:在重建索引后,发现Mysql服务器的磁盘空间快满了 在用如下命令重建索引...
相关文章
    暂无相关文章
评论暂时关闭