MySQL ibdata1文件太大的解决办法

在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_

相关文章
相关标签/搜索