mysql使用一段時間後,資料檔案ibdata會增長得很大(主要是針對innodb的儲存方式,有大量插入刪除操作的資料庫),有沒有很好的辦法可以收縮(shrink)資料檔案呢?在網上查了一下,沒有太好的辦法,只提到刪除重建資料檔案的方式,實際就是備份-刪除-恢復的方法,我試驗了一下,基本可行,但還是有一些注意事項:
1. 用mysqldump等工具匯出資料
我的資料庫使用latin1字符集,必須強制在引數裡指定(否則預設按utf8匯出中文會變亂碼):
mysqldump --add-drop-table --user=root --flush-logs --default-character-set=latin1 --password=mysql mydbname > c:/bak_all.sql
注意sqlyog等工具也提供匯出類似匯出功能,但它們的匯出不一定好用,有可能匯出來後有亂碼或不能執行。
2. 停止 mysqld (也就是mysql的服務)
3. 刪除ibdata*, ib_logfile* 檔案,最好連你的使用者資料庫目錄一起刪除,不然導回時可能報錯
4. 重新啟動 mysqld(這時mysqld就會自動建立 idbdata*, ib_logfile* 檔案)
如果前面已刪除了資料庫目錄,這是需要重建乙個你的使用者資料庫(用sqlyog等工具建新資料庫非常簡單)
5. 將匯出來的資料導回去,體積才會減小。
可以使用命令:
mysql --user=root --password=mysql mydbname < c:/bak_all.sql
當然,也可以在sqlyog的查詢工具裡執行sql檔案來恢復。
另外,提供乙個小技巧,如果你的帳號密碼帶有空格,在命令列怎麼輸入呢?
很簡單,在你的帳號密碼兩邊帶上英文雙引號 " (注意不是單引號)。比如:
mysqldump --add-drop-table --user=root --flush-logs --default-character-set=latin1 --password=" " mydbname > c:/bak_all.sql
MySQL資料檔案收縮問題
mysql使用一段時間後,資料檔案ibdata會增長得很大 主要是針對innodb的儲存方式,有大量插入刪除操作的資料庫 有沒有很好的辦法可以收縮 shrink 資料檔案呢?在網上查了一下,沒有太好的辦法,只提到刪除重建資料檔案的方式,實際就是備份 刪除 恢復的方法,我試驗了一下,基本可行,但還是有...
autoShrink和手動收縮資料檔案
1 當autoshrink開啟時,如果手動收縮資料檔案,會提示錯誤,因為此時有個後台執行緒正在收縮資料檔案,那有沒有辦法kill掉這個後台執行緒呢?答案是沒有,只能關閉資料庫選項autoshrink,然後一直等到,直到該執行緒自己結束!詳細的說明在 這裡 2 能不能收縮資料檔案?看看收縮資料檔案的缺...
ORACLE 收縮表空間的資料檔案
在實際的應用中經常會遇到truncate或者delete表中的資料後發現表空間並沒有將空間進行釋放,磁碟空間被告占用感覺空間白白被浪費掉了。提供乙個 表空間的簡單方法供參考 通過下面的sql語句檢視表空間總大小及實用大小,然後拼出來乙個sql語句將表空間的資料檔案重新設定大小 select alte...