vlambda博客
学习文章列表

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
    到此,就完成了大文件的删除,并且以后会分而治之的存储。