MYSQL下如何安全的快速刪除大表
1.1 適用場景
如果資料庫裡有一張大於1T的表需要刪除,那麼用什麼方法操作最安全呢?所謂的安全,即為刪除過程中,不影響資料庫的響應,業務連線不會卡殼,系統正常使用……
假如直接登入資料庫使用drop table tablename;會是什麼情況?在drop table的時候,innodb會維護一個全域性鎖,drop完畢鎖才能釋放。這就意味著,在白天,訪問量非常大的時候,執行刪除大表的命令,整個mysql就會掛起,在刪表期間,QPS也會嚴重下滑,後果可想而知……
1.2 最佳選擇(原理)
正確的方法為使用linux下硬連結的知識,進行大表刪除,對資料庫自身的健康度影響較小。
所謂的硬連結,就是不止一個檔名指向node Index,有好幾個檔名指向node Index。
假設,又有一個檔名指向上面的node Index,如下:
這時,如果做了刪除檔名(1)的操作,linux系統檢測到,還有一個檔名(2)指向node Index,因此並不會真正的把檔案刪了,而是把檔案(1)的引用給刪了,這步操作非常快,只是刪除引用。於是就會變成如下:
接下來,如果再刪除檔名(2)的操作,linux系統檢測到,沒有其他檔名指向該node Index,就會刪除真正的儲存檔案,這步操作,是刪真正的檔案,所以會比較慢。這時,我們寫一個for迴圈,進行小量檔案,多次刪除,直到大檔案變小,安全了,才從磁碟上RM。
1.3 環境說明
雙主架構:192.168.157.50:30016,192.168.157.51:30016
例項名字:xxx_test
刪除大表:xxx.alipay_fans,大小為30GB
檔案路徑:/data/mysql/db_xxx_test/data/xxx/Alipay_fans.ibd
1.4 操作步驟
1.4.1 建立硬連結
在50主機上:
在51主機上:
1.4.2 刪除表
只在主庫50上操作,drop後只剩下bbk的硬連結。
檢視51上的檔案情況,同主庫一樣,只剩下bbk的硬連結。
1.4.3 刪除檔案
在50主機上操作:
在51主機上操作:
1.4.4 驗證主從狀態
操作完成後,主從狀態正常,資料庫狀態正常。
1.5 指令碼說明
#filename=/data/mysql/db_xxx_test/data/xxx/alipay_fans.ibd #filesize=30 # 定義要刪除檔案的大小,單位GB(以實際大小調整) #ln $filename $filename.bbk # for i in `seq $filesize -1 1`;do truncate -s ${i}G $filename.bbk;ll -h $filename.bbk;done #rm $filename.bbk |
備註:從檔案大小30G開始,每次縮減1G,執行truncate,直到檔案剩餘1G,最後使用rm命令刪除剩餘的部分。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7836221/viewspace-2795457/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL如何優雅的刪除大表MySql
- 如何刪除資料庫下的所有表(mysql)資料庫MySql
- Oracle快速找回被刪除的表Oracle
- MySQL刪除資料表MySql
- 簡單介紹mysql如何刪除資料表和關聯的資料表刪除詳情MySql
- mySql刪除多個表 刪除多個欄位的SQLMySql
- [MYSQL][1]建立,修改,刪除表MySql
- Windows環境下刪除MySQLWindowsMySql
- mysql 刪除表中重複的資料MySql
- python 刪除大表資料Python
- mysql下批量清空某個庫下的所有表(庫不要刪除,保留空庫)MySql
- 如何高效率刪除大表歷史資料
- MySQL超大表刪除資料過程MySql
- mysql 跨表查詢、更新、刪除示例MySql
- Linux如何快速刪除大量碎小檔案?Linux
- MySQL 如何重建/恢復刪除的 sys SchemaMySql
- mysql支援跨表delete刪除多表記錄MySqldelete
- 如何快速刪除Word中的頁首橫線?刪除頁首橫線技巧分享
- MySQL表的增刪改查(進階)下MySql
- 修改刪除表
- 教你如何刪除Mac下的iCloud資料?MacCloud
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- 【C/C++】資料庫刪除大表C++資料庫
- Oracle億級大表高效刪除案例分析Oracle
- Mysql索引的建立與刪除MySql索引
- 探索vim之如何快速刪除檔案內容
- [20200414]Linux下快速刪除大量檔案(補充).txtLinux
- mysql刪除查詢MySql
- MySQL 5.7的表刪除資料後的磁碟空間釋放MySql
- [升級需要用到的] mysql更新表 增加、刪除、修改表欄位MySql
- mysql刪除主鍵索引,刪除索引語法MySql索引
- MySQL在刪除表時I/O錯誤原因分析MySql
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- 【常用方法推薦】如何刪除MySQL的重複資料?MySql
- MySQL---資料刪除之後表檔案不變MySql
- MySQL-刪除欄位MySql
- mysql 刪除重複項MySql
- win10如何刪除局快速訪問專案_win10系統怎樣刪除快速訪問記錄Win10