<a href="http://blog.chinaunix.net/uid-12427199-id-4220655.html">原文位址:MySql ibdata1檔案太大如何縮小</a>
MySql innodb如果是共享表空間,ibdata1檔案越來越大,達到了30多個G,對一些沒用的表進行清空:
truncate table xxx;
然後optimize table xxx; 沒有效果
因為對共享表空間不起作用。
mysql ibdata1存放資料,索引等,是MYSQL的最主要的資料。
如果不把資料分開存放的話,這個檔案的大小很容易就上了G,甚至幾十G。對于某些應用來說,并不是太合适。是以要把此檔案縮小。
無法自動收縮,必須資料導出,删除ibdata1,然後資料導入,比較麻煩,是以需要改為每個表單獨的檔案。
解決方法:資料檔案單獨存放(共享表空間如何改為每個表獨立的表空間檔案)。
步驟如下:
1)備份資料庫
備份全部資料庫,執行指令
做完此步後,停止資料庫服務。
2)找到my.ini或my.cnf檔案
linux下執行
在裡面查找Default options,可以看到查找my.ini的順序,以找到真實目錄
3)修改mysql配置檔案
打開my.ini或my.cnf檔案
[mysqld]下增加下面配置
驗證配置是否生效,可以重新開機mysql後,執行
看看innodb_file_per_table變量是否為ON
4)删除原資料檔案
删除原來的ibdata1檔案及日志檔案ib_logfile*,删除/var/lib/mysql目錄下的應用資料庫檔案夾(mysql檔案夾不要删)
5)還原資料庫
啟動資料庫服務
從指令行進入MySQL Server
還原全部資料庫,執行指令
經過以上幾步後,可以看到新的ibdata1檔案就隻有幾十M了,資料及索引都變成了針對單個表的小ibd檔案了,它們在相應資料庫的檔案夾下面。