2007年10月22日 星期一

Could not shrink Mysql InnoDB file.

什麼?!
這年代還有這樣的事...
令我扼腕不已...

Mysql 如果採用 innodb 的 database engine, 預設是一個大 innodb file, 卻無法變小, 永遠的長大.
當然, 砍掉資料可以清出空間, 可是這個 free space 無法釋放到 File size 去.
查了半天, 唯一的辦法是砍掉重練. (ex : backup all database, delete all file, re-construct database)

Okay, 下次遇到 innodb, 要先在 my.ini 當中設定


[MySqld]
...
innodb_file_per_table
...

這樣, innodb 就會使用單一檔案來存放每個 table.
但是 innodb 先天的架構使然, 那個唯一的檔案 :  ibdata1 還是不可以砍掉!
而且也不可以像 MyIASM 一樣可以獨立搬動...
換句話說, 雖然使用了單一檔案, 還是有部分資訊存在 ibdata1 當中.
不過, 這樣就可以 shrink 該 table file, 也不會造成 ibdata1 過大無法變小.

而 shrink 的方法居然是:
alter table [tablename] engine=innodb;
好家在看起來該行指令似乎可以 online 重建 table.
不過, 這個重建的方法, 事實上底層也算是砍掉重練了...
沒關係, 只要不要叫我把 database shutdown...

HEMiDEMi Technorati Del.icio.us MyShare個人書籤 Yahoo

0 意見: