在MySQL數據庫中,若是不指定innodb_file_per_table=1參數單獨保存每一個表的數據,MySQL的數據都會存放在ibdata1文件裏,時間久了這個文件就會變的很是大。mysql
下面是參考網上的一些資料,把數據分別保存在各數據庫子目錄裏的方法,這樣新產生的ibdata1文件就不會太大了。下面是在Ubuntu 14.04.12 x64,MySQL5.5上對ibdata1進行瘦身,操做過程的整理。sql
一、備份數據庫中的數據。數據庫
mysqldump -u root -p --extended-insert --all-databases --add-drop-database --disable-keys --flush-privileges --quick --routines --triggers > /home/all-database.sql服務器
//有的文檔用的是這樣的參數:mysqldump -q -uroot -p --add-drop-table --all-databases --events >/home/all-database.sqlui
若是ibdata1上百GB,備份過程可能須要幾小時。url
二、中止MySQL服務。orm
service mysql stop索引
三、刪除ibdata一、ib_logfile*等文件文檔
mv ibdata1 ibdata1.20160419get
mv ib_logfile0 ib_logfile0.20160420
mv ib_logfile1 ib_logfile1.20160420
四、修改my.cnf配置文件
vi /etc/mysql/my.cnf
在[mysqld]子項下增長以下配置:
innodb_file_per_table = 1
五、刪除MySQL、performance_schema以外的全部數據庫
cd /var/lib/mysql
rm -rf zabbix
服務器上只有Zabbix數據庫。
六、重啓MySQL服務
service mysql start
ps -ef|grep mysql
七、恢復數據(從新導入數據)
mysql -u root -p
Enter password:
source /home/all-databaes.sql
exit
//有的文檔用這樣的命令格式:mysql -uroot -p < /home/all-database.sql
Enter password:
其中的/home/all-database.sql即爲第一步備份生成的文件,若是原來數據庫中數據較多,還原過程可能會持續較長時間,請耐心等待還原完成。若是超過30個小時還沒完成,可能要考慮停止恢復數據操做,先清除一部分table中的數據,從步驟1從新開始。若是table中記錄特多又能夠所有刪除,用truncate <tablename>速度比較快。
通過以上幾步後,能夠看到新的ibdata1文件就只有幾十兆了,數據及索引都變成了針對單個表的小
ibd文件了,它們在相應數據庫的文件夾下面。
百度文庫中有篇文檔「解決ibdata1文件過大問題操做手冊」寫的更詳細。連接爲:http://wenku.baidu.com/link?url=2qj73zDqwLwNIAPg6tB60c20wAE6a_2IIcJ8fGb2EUk0rmRdxqq2Wc0yAgnx7hoJ-dICC4rzhC9I0rWdgLVV-avatmeuCh74JxRE22NE4N_