MySql ibdata1文件太大如何縮小

MySql innodb如果是共享表空間,ibdata1文件越來越大,達到了30多個G,對一些沒用的表進行清空:
truncate table xxx;
然後optimize table xxx; 沒有效果
因爲對共享表空間不起作用。
mysql ibdata1存放數據,索引等,是MYSQL的最主要的數據。

如果不把數據分開存放的話,這個文件的大小很容易就上了G,甚至幾十G。對於某些應用來說,並不是太合適。因此要把此文件縮小。
無法自動收縮,必須數據導出,刪除ibdata1,然後數據導入,比較麻煩,因此需要改爲每個表單獨的文件。

解決方法:數據文件單獨存放(共享表空間如何改爲每個表獨立的表空間文件)。
步驟如下:

 

1)備份數據庫

從命令行進入MySQL Server 5.0\bin
備份全部數據庫,執行命令
D:\>mysqldump -q -umysql -ppassword --add-drop-table --all-databases > c:/all.sql

做完此步後,停止數據庫服務。

 

2)找到my.ini或my.cnf文件
linux下執行 ./mysqld --verbose --help | grep -A 1 'Default options'
會有類似顯示:
Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf /usr/local/service/mysql3306/etc/my.cnf

windows環境下可以:
mysqld --verbose --help > mysqlhelp.txt
notepad mysqlhelp.txt
在裏面查找Default options,可以看到查找my.ini的順序,以找到真實目錄

 

3)修改mysql配置文件
打開my.ini或my.cnf文件
[mysqld]下增加下面配置
innodb_file_per_table=1

驗證配置是否生效,可以重啓mysql後,執行
show variables like '%per_table%'
看看innodb_file_per_table變量是否爲ON

 

4)刪除原數據文件

刪除原來的ibdata1文件及日誌文件ib_logfile*,刪除data目錄下的應用數據庫文件夾(mysql文件夾不要刪)

 

5)還原數據庫

啓動數據庫服務

從命令行進入MySQL Server 5.0\bin
還原全部數據庫,執行命令mysql -uusername -pyourpassword < c:/all.sql

經過以上幾步後,可以看到新的ibdata1文件就只有幾十M了,數據及索引都變成了針對單個表的小ibd文件了,它們在相應數據庫的文件夾下面。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章