mysql ibdata1文件存放數據,索引等。如果不把數據庫中數據分開存放的話,這個文件的大小很容易就上了G,甚至幾十G。對於某些應用、磁盤較小的server來說,並不是太合適。因此要把此文件縮小。
方法:每張表的數據文件單獨存放。
步驟:
1. 備份數據庫
從命令行進入MySQL Server 5.5/bin
備份全部數據庫,執行命令mysqldump -q -uusername -pyourpassword --add-drop-table --all-databases > /all.sql
做完此步後,停止數據庫服務
2. 修改mysql配置文件
修改my.ini文件,增加下面配置
iinnodb_file_per_table = 1
對每張表使用單獨的innoDB文件, 修改/etc/my.cnf文件
3. 刪除原數據文件
刪除原來的ibdata1文件及日誌文件ib_logfile*,刪除data目錄下的應用數據庫文件夾(mysql文件夾不要刪)
4. 還原數據庫
啓動數據庫服務
從命令行進入MySQL Server 5.5/bin
還原全部數據庫,執行命令mysql -uusername -pyourpassword < /all.sql
經過以上幾步後,可以看到新的ibdata1文件就只有幾十M了,數據及索引都變成了針對單個表的小ibd文件了,它們在相應數據庫的文件夾下面。
注:目前還沒有找到不導出數據再導入,直接縮小ibdata文件體積的辦法。對於ibdata文件有壞道、表空間有損壞的數據庫來說,只能跳過損壞的id,dump出數據成sql文件,再導入了。