Mysql的ibdata1文件过大?解决它!
最近因为搬了一些文章的砖,导致账号被封了一段时间,从今天起我要改过自新,重新做号。 |
今天讲一讲前两天一位运维同事提出的问题,这位小姐姐给酉哥发消息说她现场的数据库服务器内存占用了很多,发现是mysql数据库下有个ibdata1文件竟然有60个G,想让酉哥出解决方案。
先来介绍下ibdata1文件:
MySQL使用InnoDB引擎的时候,ibdata1这个文件会随着时间的增长,会变得越来越大,占据大量的磁盘空间。 那么,ibdata1里保存了哪些东西,为什么会变得越来越大呢,让我们来看看ibdata1的构造。 ibdata1是InnoDB的共有表空间,默认情况下会把表空间存放在一个文件ibdata1中,会造成这个文件越来越大。 发现问题所在之后,解决方法就是,使用独享表空间,将表空间分别单独存放。MySQL开启独享表空间的参数是Innodb_file_per_table,会为每个Innodb表创建一个.ibd的文件 |
知道原理,就好办了,接下来把解决方案贴出来:
备份数据库
mysqldump -u <user> -p <password> --all-databases > backup.sql
删除所有数据库
-
drop database database_N
停止mysql服务
service mysql stop
删除文件ibdata1, ib_logfile0, ib_logfile1
修改my.ini或者my.cnf配置文件
[mysqld]
innodb_file_per_table=1
重启MySQL服务 service mysql start
导入备份数据 mysql -u <user> -p <password> < backup.sql
到此,就完成了大文件的删除,并且以后会分而治之的存储。