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文件了,它们在相应数据库的文件夹下面。
百度文库中有篇文档“解决ibdata1文件过大问题操作手册”写的更详细。链接为:http://wenku.baidu.com/link?url=2qj73zDqwLwNIAPg6tB60c20wAE6a_2IIcJ8fGb2EUk0rmRdxqq2Wc0yAgnx7hoJ-dICC4rzhC9I0rWdgLVV-avatmeuCh74JxRE22NE4N_
本文来自博客园,作者:飞龙在生,转载请注明原文链接:https://www.cnblogs.com/flzs/p/10918603.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析