天天看點

MySql ibdata1檔案瘦身

<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檔案了,它們在相應資料庫的檔案夾下面。