MySQL如何刪除 sql開頭的臨時表

2022-08-02 12:54:17 字數 1975 閱讀 8892

巡檢時發現伺服器磁碟空間不足,通過檢視大檔案進行篩選是發現有幾個#sql開頭的檔案,且存在超過100g及10g以上的檔案。

如果mysql在乙個 alter table操作(algorithm=inplace)的中間退出,那麼可能會留下乙個占用系統空間的臨時表。例如,在對一張表(大表)新增索引時中途中斷、磁碟不足導致異常或正在新增索引時例項被kill等等情況所致。

注意:此類表空間檔案不能直接rm -f的方式物理刪除,因為該資訊記錄在ibdata的共享表空間裡,直接刪除後,後續例項重啟時會出現錯誤。

如果 #sql-*.ibd 和 #sql-*.frm兩個檔案都存在資料目錄裡的話,可以直接drop table。但注意刪除時候表名的變化。

/*

直接刪除,表名前加#mysql50

*/root

@testdb

01:42:57

>

drop

table `#mysql50##sql-ib87-

856498050`;

注: #mysql50#字首是mysql 5.1中引入的檔名安全編碼。另外,表名因不符合命名規範,想要執行該指令碼需要將表名用反引號括起來。

因為本例中沒有存在.frm 和.ibd名稱相同的檔案的情況,因此採用建立一張與ibd表空間對應的結構(欄位名及索引)一致的表,然後將frm檔案拷貝為和ibd一致的檔案,再進行刪除。

下面處理截圖中#sql-ib1516-2335726735.ibd檔案,

步驟如下:

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

[root@db4 testdb]# cp -p  company20191216.frm  \#sql-ib1516-2335726735.frm
因為上一步拷貝時使用-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檔案也一併刪了)

上一步中刪除ibd檔案時,其中乙個frm也自動刪除了。為此,嘗試通過修改frm檔名和ibd檔名一致的方式處理。但要注意,由於不確定是否結構一致,修改後可能異常,但如果沒有暴力處理,通常均可以成功。如下:

其實還有其他的方式處理,大家可以自行測試。

刪除oracle bin 開頭的表

oracle刪除的表系統會自動給他重新命名就是大家看到的 bin 開頭的名字。通過show recyclebin命令可以檢視被刪掉的表的詳細資訊,或者查詢 select from recyclebin 收回表的命令 flashback table 原表名 to before drop 清空 站的命令...

Oracle 刪除Bin開頭的Table

刪除bin開頭的表,即已經drop但存在於 站中的表 查詢所有此類表sql select from recyclebin where type table 用來刪除 站中所有的表sql purge recyclebin 用來刪除指定的表sql purge table table name 用來閃回被...

mysql 關聯刪除 mysql如何刪除關聯表

mysql資料庫中,表與表之間進行關聯之後,就不可隨意的進行刪除操作,否則會影響所有關聯表之間的結構,那麼如何安全的刪除關聯表呢,讓我們來了解一下。mysql使用drop命令刪除關聯表,方法為 1.刪除表的外來鍵約束 外來鍵是乙個特殊字段,其將某乙個表與其父表建立關聯關係。在建立表的時候,外來鍵約束...