什麼?!
這年代還有這樣的事...
令我扼腕不已...
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...
0 意見:
張貼留言