MySQL ibdata1文件太大的解決辦法
在MySQL數據庫中,如果不指定innodb_file_per_table=1參數單獨保存每個表的數據,MySQL的數據都會存放在ibdata1文件里,時間久了這個文件就會變的非常大。
下面是參考網上的一些資料,把數據分別保存在各數據庫子目錄里的方法,這樣新產生的ibdata1文件就不會太大了。下面是在Ubuntu 14.04.12 x64,MySQL5.5上對ibdata1進行瘦身,操作過程的整理。
1、備份數據庫中的數據。
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.sql
如果ibdata1上百GB,備份過程可能需要幾小時。
2、停止MySQL服務。
service mysql stop
3、刪除ibdata1、ib_logfile*等文件
mv ibdata1 ibdata1.20160419
mv ib_logfile0 ib_logfile0.20160420
mv ib_logfile1 ib_logfile1.20160420
4、修改my.cnf配置文件
vi /etc/mysql/my.cnf
在[mysqld]子項下增加如下配置:
innodb_file_per_table = 1
5、刪除MySQL、performance_schema之外的所有數據庫
cd /var/lib/mysql
rm -rf zabbix
服務器上只有Zabbix數據庫。
6、重啟MySQL服務
service mysql start
ps -ef|grep mysql
7、恢復數據(重新導入數據)
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文件了,它們在相應數據庫的文件夾下面。