Maison > Questions et réponses > le corps du texte
最近将数据库从库从5.5升级到5.7,发现储存MySQL磁盘空间一下子占用变大了很多,排查了一下发现是升级后MySQL的系统表空间(ibdata1)很大[原本就很大],单个innodb表的表空间也变得很大[升级后变大],正常情况下应该只有一方会很大(系统的MyISAM表不多)
具体情况如下:
升级前,mysql数据库5.5,innodb_file_per_table使用默认配置,即是关闭的,innodb的表和索引都存储在一起(ibdata1文件很大);
升级到5.7时,innodb_file_per_table仍使用默认配置,但是默认是开启的,升级时使用mysql_upgrade后,每个表使用了独立的表空间,即每个数据库文件夹下的表空间文件很大,但是原本的系统表空间ibdata1并没有对应的变小。
查询手册发现:
在mysql5.5的时候innodb_file_per_table配置是默认关闭的,
但是数据库升级到5.7的时候,innodb_file_per_table配置默认开启了(其实在mysql5.6.6的时候就默认开启了),
官网说明:http://dev.mysql.com/doc/refm...
请问有没有方法在不重新导入数据的情况下(重新导入耗时太长),使原本的系统表空间ibdata1文件变小。
怪我咯2017-04-17 15:32:18
首先需要明确你要做什么
1、MySQL 从5.5 升级到 5.7
2、不想重新导数据,减少ibdata1空间
如果你是生产环境的数据,建议你做好数据库升级前的兼容性工作,充分的评估并找到不兼容或问题点,并解决。生产环境进行版本升级建议做数据库的导入导出操作,不建议原地升级。
如果是测试环境你可以随意折腾,甚至是执行完mysql_upgrade后 关闭MySQL,删除ibdata1 文件,重启后看看效果。
或者使用一些表整理命令或者尝试修改表存储引擎的方式整理一些表看看有没有效果。