- 使用 mysqldump 匯出全部 innoDB 資料表。
- 刪除所有 innoDB 資料表。
- 停止 MySQL。
- 刪除 ibdata 和 ib_log 檔案 (在data資料夾底下的 ibdata*、ib_logfile* 檔案)。
- 啟動 MySQL。
- 匯入資料。
啟用 innodb_file_per_table 的步驟如下:
- 使用 mysqldump 匯出全部 innoDB 資料表。
以下是匯出全部資料庫的資料mysqldump -u root -p --events --routines --triggers --all-databases --default-character-set=utf8 > d:\backup.sql
以下是匯出指定資料庫(例:abc)mysqldump -u root -p --events --routines --triggers --default-character-set=utf8 abc > d:\backup.sql
- 刪除所有 innoDB 資料表。
- 停止 MySQL。
- 刪除 ibdata 和 ib_log 檔案 (在data資料夾底下的 ibdata*、ib_logfile* 檔案)。
- 修改 MySQL 設定檔(my.ini 或 my.cnf)設定,開啟 innodb_file_per_table
innodb_file_per_table=1
- 啟動 MySQL。
- 匯入資料。
mysql --default-character-set=utf8 -u root -p < d:\backup.sql
以下是匯入到指定資料庫(例:abc)mysql --default-character-set=utf8 -u root -p abc < d:\backup.sql
- 如此在每個資料庫資料夾底下,innodb 資料表都會有自己的 *.ibd 檔案。
OPTIMIZE TABLE 資料表名稱
參考:
Decreasing the Size of the InnoDB Tablespace
Reclaiming Disk Space with TRUNCATE TABLE
InnoDB Startup Options and System Variables
How to reclaim space in InnoDB when innodb_file_per_table is ON
沒有留言:
張貼留言