Mysql如何刪除以“#sql-”開頭的暫存資料表,

來源:互聯網
上載者:User

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:&......餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.