今天碰到了mysql中ibdata1过大的问题,于是深入研究了一下。

ibdata1文件是什么?
答:
     ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据、撤销记录、修改buffer和双写buffer。如果file-per-table选项打开的话,该文件则不一定包含所有表的数据。当innodb_file_per_table选项打开的话,新创建表的数据和索引则不会存在系统表空间中,而是存放在各自表的.ibd文件中。
     显然这个文件会越来越大,innodb_autoextend_increment选项则指定了该文件每次自动增长的步进,默认是8M。


是什么原因导致ibdata1文件会越来越大?
答:
     显然ibdata文件存的是数据库的表数据,如缓存,索引等。所以随着数据库越来越大,表也会越大,这个无法避免的。那么服务器硬盘空间不够了怎么办?我们只能把ibdata中的一些log文件都清掉。
怎么解决问题?
答:
     ibdata文件中包含的数据并不是我们都需要的,比如撤销日志,这些日志是可以定期删除的。但是之前是放在一个文件中,所以不好删除。因此最好的办法是把ibdata中需要存放的内容进行分开存放,除了
数据文件可以保存,其他不是非必要文件都单独存放并且定时清理。这样可以缓解数据库服务器磁盘的压力。

如果ibdata已经很大了该怎么办?
答:
     先把数据库文件备份下来,然后直接删除ibdata文件,重新导入数据库文件即可。这样就可以把ibdata中的日志和缓存都删除掉了。

你可能感兴趣的:(今天碰到了mysql中ibdata1过大的问题,于是深入研究了一下。)